[英]How to launch a terminal app on PATH in Swift on macOS?
我想在 macOS 上的 Swift 应用程序中启动一个终端应用程序(如“git”)。 我的代码如下所示:
do {
let process: Process = Process();
process.launchPath = "git";
process.arguments = [
"..."
];
process.launch();
} catch {
print("Cannot launch git: \(error)")
}
在我的盒子上 git 位于 PATH 上,只需运行git
即可在终端中顺利启动。 我怎样才能在我的 Swift 应用程序中实现这一点?
是否可以让Process
自行解决应用程序路径,还是我必须自己解决? 如果我必须手动完成,我该怎么做?
更新:启动应用程序是一个 GUI 应用程序,它可以从 Finder 运行,也可以从 Xcode 调试。
我可以像这样读取 PATH:
var env = ProcessInfo.processInfo.environment
var path = env["PATH"]! as String
但该值不包含终端的 PATH 值。
@MartinR 的评论让我想到了正确的想法。 不要直接运行终端命令,而是从新的 shell 运行。 这样,它将为您执行 PATH 解析:
let shellProcess = new Process();
shellProcess.launchPath = "/bin/bash";
shellProcess.arguments = [
"-l",
"-c",
// Important: this must all be one parameter to make it work.
"mysqlsh --py -e 'print(\"Call from shell\")",
];
shellProcess.launch();
本例以 MySQL shell 为例,它位于/usr/local/bin
中(与 git 不同,它位于/usr/bin
中)。 Git 一开始就已经工作了,而 mysqlsh 没有。 从注释中还可以看出,重要的是要使 mysqlsh 调用成为一个完整且单一的参数条目。 如果将其拆分,则/bin/bash -c
将仅执行mysqlsh
而不会传递给定的 shell 参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.