Swift mac 应用程序,运行 不知道路径的终端命令(所以它会在 $PATH 中的每个路径中查找)?
Swift mac app, run terminal command without knowing the path (so it looks in every path in $PATH)?
我正在尝试从我的 swift mac 应用程序 运行 终端命令,我希望用户像在终端中一样输入任何命令,而不必指定真实路径。有没有办法 运行 一个命令并让它在 $PATH 变量中指定的每个路径中查找?
当我指定路径时,我可以 运行 命令,但我需要它从系统 $PATH 变量中的任何路径自动查找二进制文件
let path = "/usr/bin/killall"
let arguments = ["Dock"]
let task = Process.launchedProcess(launchPath: path, arguments: arguments)
task.waitUntilExit()
将来我想阅读 .sh 文件和其中的每一行 运行,因此对于长脚本,并非所有二进制文件都在默认路径中。
谢谢!
您可以通过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
execlp
和朋友们也使用 $PATH
找到可执行文件,但只提供 "raw" C 接口。
我正在尝试从我的 swift mac 应用程序 运行 终端命令,我希望用户像在终端中一样输入任何命令,而不必指定真实路径。有没有办法 运行 一个命令并让它在 $PATH 变量中指定的每个路径中查找?
当我指定路径时,我可以 运行 命令,但我需要它从系统 $PATH 变量中的任何路径自动查找二进制文件
let path = "/usr/bin/killall"
let arguments = ["Dock"]
let task = Process.launchedProcess(launchPath: path, arguments: arguments)
task.waitUntilExit()
将来我想阅读 .sh 文件和其中的每一行 运行,因此对于长脚本,并非所有二进制文件都在默认路径中。
谢谢!
您可以通过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
execlp
和朋友们也使用 $PATH
找到可执行文件,但只提供 "raw" C 接口。