簡體   English   中英

如何在 macOS 上的 Swift 中的 PATH 上啟動終端應用程序?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM