通过NSTask在Cocoa应用程序中运行“ls”无效

时间:2015-08-16 17:28:36

标签: cocoa nstask

我正在测试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)")

该应用运行但我收到以下错误:

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

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

由于

1 个答案:

答案 0 :(得分:3)

嗯,对于初学者来说,/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"]未设置。 1}})。