Swift mac应用程序,在不知道路径的情况下运行终端命令(因此它会在$ PATH中的每个路径中查找?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift mac应用程序,在不知道路径的情况下运行终端命令(因此它会在$ 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

示例:

env utility argument ...

let path = "/usr/bin/env" let arguments = ["ls", "-l", "/"] let task = Process.launchedProcess(launchPath: path, arguments: arguments) task.waitUntilExit() 使用env变量查找给定的实用程序,然后然后使用给定的参数执行它。它有额外的用于指定其他搜索路径和其他选项的选项环境变量。

((这不是Swift的功能,而是macOS和许多其他操作系统的功能。)

从Finder(双击)启动时,$PATH可能会不同从您的Shell环境中的PATH。如有必要,您可以添加其他目录:

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查找可执行文件,但仅提供“原始” C接口。

以上是关于Swift mac应用程序,在不知道路径的情况下运行终端命令(因此它会在$ PATH中的每个路径中查找?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 brew 的情况下使用终端将 maven 安装到 mac [重复]

使用 Qt 在不知道完整路径的情况下终止进程

使用ant,在不知道完整路径的情况下重命名目录?

是否可以在不调用“节点”的情况下运行 Node.js 脚本?

python 如何在不知道的情况下获取相对文件路径。在此示例中,Python代码,HTML文件。

Swift:如何在不添加工具栏的情况下更改导航控制器的高度