繁体   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