我正在测试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命令,然后将结果存储到字符串数组中......
由于
答案 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}})。