运行 "ls" 在 Cocoa 应用程序中通过 NSTask 无法正常工作

run "ls" through NSTask in a Cocoa app not working

我正在测试 NSTask 的使用,因为我想尝试 运行 我用 Swift 编写的 Cocoa 应用程序中的一堆命令,我通常 运行 ] 在终端中。

在 viewDidLoad 中,我有以下代码:

    let task = NSTask()
    let pipe = NSPipe()
    task.standardOutput = pipe

    task.launchPath = "/usr/bash"
    task.currentDirectoryPath = dir
    task.arguments = ["ls"]

    let file:NSFileHandle = pipe.fileHandleForReading

    task.launch()
    task.waitUntilExit()

    let data =  file.readDataToEndOfFile()
    let datastring = NSString(data: data, encoding: NSUTF8StringEncoding)
    print("datastring = \(datastring)")

应用程序 运行s 但我收到以下错误:

无法在 (NSWindow) 上设置 (contentViewController) 用户定义检查 属性:启动路径不可访问

有人可以帮助我理解我做错了什么吗?我现在要做的是 运行 ls 命令,然后将结果存储到字符串数组中...

谢谢

嗯,对于初学者来说,/usr/bash 不是 bash 可执行文件的路径。你想要 /bin/bash.

接下来,调用 /bin/bash ls 不起作用,这与您所做的等效。在 shell,如果你想给 bash 一个命令来处理和执行,你会做 /bin/bash -c ls。因此,您想将任务的 arguments 设置为 ["-c", "ls"].

但是,您为什么要在这里涉及 shell 口译员?为什么不直接将任务的 launchPath 设置为 "/bin/ls" 和 运行 ls 命令呢?如果您只想列出当前工作目录的内容,您可以不设置 arguments,或者将其设置为要传递给 ls 的参数,例如选项或路径(例如 ["-l", "/Applications"]).