Macos 在Swift中运行shell命令
我正在尝试在我的OSX应用程序中使用Swift运行shell命令 运行诸如echo之类的基本命令可以很好地工作,但是以下抛出 “env:node:没有这样的文件或目录” 在运行系统命令时,我还得到“sh:node:command not found”Macos 在Swift中运行shell命令,macos,bash,swift,shell,Macos,Bash,Swift,Shell,我正在尝试在我的OSX应用程序中使用Swift运行shell命令 运行诸如echo之类的基本命令可以很好地工作,但是以下抛出 “env:node:没有这样的文件或目录” 在运行系统命令时,我还得到“sh:node:command not found” system("node -v") 更新: 没有下面的一些建议那么好,但我设法将命令回显到一个文件中,并在终端中打开和执行它: system("echo node -v > ~/installation.command; chmod +x
system("node -v")
更新:
没有下面的一些建议那么好,但我设法将命令回显到一个文件中,并在终端中打开和执行它:
system("echo node -v > ~/installation.command; chmod +x ~/installation.command; open ~/installation.command")
“sh:节点:未找到命令”
显然,节点
不是绝对路径
听起来您已经更改了~/.bash_profile
或其他文件,以在路径中包含节点的位置
system
正在使用sh-c
启动bash
我忘记了确切的规则是什么,但是当以这种方式执行时,bash
至少会忽略一些配置文件。您对路径的更改可能未被读取或应用
“env:node:没有这样的文件或目录”
同样,节点
不是绝对路径NSTask
不使用shell,因此您执行的任何进程都将继承应用程序的环境变量。在大多数情况下,这意味着默认的路径
如果您需要为NSTask
创建自定义环境,请从NSProcessInfo
中获取environment
字典,进行更改,然后设置NSTask
的environment
属性
nodejs
安装程序使用/usr/local/bin
,这不包括在从Finder启动的应用程序的路径中:
/usr/bin:/bin:/usr/sbin:/sbin
该目录包含在通过/etc/profile
&为bash
设置的路径中:
选项:
- 只需编写
/usr/local/bin/node
而不是node
- 通过
环境
属性调整NSTask
使用的路径
- 用于更改
系统的路径
-也会影响NSTask
- 作为登录shell执行
bash
。有关详细信息,请参阅
因此,您可以执行我觉得更方便的shell(“node-v”)
:您确实安装了名为node
的命令行util吗?在终端中尝试node-v
时会发生什么情况?在运行命令之前编写路径非常简单,谢谢。
/usr/bin:/bin:/usr/sbin:/sbin
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
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
}