我试图从我的swift mac应用程序运行终端命令,我希望用户输入任何命令,就像他们在终端中那样,而不必指定真实路径。有没有办法运行命令并使其在$ PATH变量中指定的每个路径中查看?
我可以在指定路径时运行命令,但我需要它从系统$ PATH变量中的任何路径自动查找二进制文件
let path = "/usr/bin/killall"
let arguments = ["Dock"]
let task = Process.launchedProcess(launchPath: path, arguments: arguments)
task.waitUntilExit()
将来我想读取.sh文件并运行其中的每一行,因此对于长脚本,并非所有二进制文件都在默认路径中。
谢谢!
答案 0 :(得分:3)
您可以通过env
执行命令:
env utility argument ...
示例:
let path = "/usr/bin/env"
let arguments = ["ls", "-l", "/"]
let task = Process.launchedProcess(launchPath: path, arguments: arguments)
task.waitUntilExit()
env
使用$PATH
变量定位给定的实用程序
然后用给定的参数执行它。它有额外的
用于指定其他搜索路径的选项
环境变量。
(这不是Swift的功能,而是macOS和许多其他操作系统的功能。)
从Finder启动(双击)时,PATH
可能会有所不同
来自shell环境中的PATH
。如有必要,您可以添加
其他目录:
var env = task.environment ?? [:]
if let path = env["PATH"] {
env["PATH"] = "/usr/local/bin:" + path
} else {
env["PATH"] = "/usr/local/bin"
}
task.environment = env
excelp
和朋友们也使用$PATH
查找可执行文件,但只提供" raw" C接口。