[英]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.