[英]Running shell commands in Swift
我正在尝试在我的OSX应用程序中使用Swift运行shell命令。
运行echo之类的基本命令可以正常运行,但是后续抛出
“env:node:没有这样的文件或目录”
@IBAction func streamTorrent(sender: AnyObject) {
shell("node", "-v")
}
func shell(args: String...) -> Int32 {
let task = NSTask()
task.launchPath = "/usr/bin/env"
task.arguments = args
task.launch()
task.waitUntilExit()
return task.terminationStatus
}
运行系统命令时,我也会收到“sh:node:command not found”。
system("node -v")
更新:
不像下面的一些建议那么好,但我设法将命令回显到一个文件中并在终端中打开并执行:
system("echo node -v > ~/installation.command; chmod +x ~/installation.command; open ~/installation.command")
func shell(command: String) -> Int32 {
let task = NSTask()
task.launchPath = "/usr/bin/env"
task.arguments = ["bash", "-c", command]
task.launch()
task.waitUntilExit()
return task.terminationStatus
}
所以你可以做shell("node -v")
,我觉得更方便:
再看看这个。
nodejs
安装程序使用/usr/local/bin
,它不包含在从Finder启动的应用程序的PATH
中:
/usr/bin:/bin:/usr/sbin:/sbin
该目录通过/etc/profile
& path_helper包含在bash
的PATH
集中:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
选项:
“sh:node:command not found”
显然, node
不是绝对路径。
听起来你已经对~/.bash_profile
或其他文件进行了更改,以在PATH
环境变量中包含node
的位置。
system
正在使用sh -c
启动bash
。
我忘了规则是什么,但是bash
在执行这种方式时会忽略至少一些配置文件。 据推测,您对PATH
的更改未被阅读或应用。
“env:node:没有这样的文件或目录”
同样, node
不是绝对路径。 NSTask
不使用shell,因此您执行的任何进程都将继承应用程序的环境变量。 在大多数情况下,这意味着默认PATH
。
如果您需要NSTask
的自定义环境, NSTask
从NSProcessInfo
获取environment
字典,进行更改然后设置NSTask
的environment
属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.