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

Swift mac应用程序,在不知道路径的情况下运行terminal命令(因此它在$path中查找每个路径)?,swift,macos,swift3,swift2,swift4,Swift,Macos,Swift3,Swift2,Swift4,我正在尝试从我的swift mac应用程序运行终端命令,我希望用户像在终端中一样输入任何命令,而无需指定实际路径。是否有方法运行命令并使其在$path变量中指定的每个路径中显示 我可以在指定路径时运行命令,但我需要它从systems$path变量中的任何路径自动查找二进制文件 let path = "/usr/bin/killall" let arguments = ["Dock"] let task = Process.launchedProcess(launchPat

我正在尝试从我的swift mac应用程序运行终端命令,我希望用户像在终端中一样输入任何命令,而无需指定实际路径。是否有方法运行命令并使其在$path变量中指定的每个路径中显示

我可以在指定路径时运行命令,但我需要它从systems$path变量中的任何路径自动查找二进制文件

    let path = "/usr/bin/killall"
    let arguments = ["Dock"]
    let task = Process.launchedProcess(launchPath: path, arguments: arguments)
    task.waitUntilExit()
在将来,我希望读取.sh文件并运行其中的每一行,因此在很长的时间内,并非所有二进制文件都将位于默认路径中


谢谢

您可以通过以下方式执行命令:

例如:

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

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

从查找器启动(双击)时,
路径可能不同
从shell环境中的
路径
。如有必要,您可以添加 其他目录:

var env = task.environment ?? [:]
if let path = env["PATH"] {
    env["PATH"] = "/usr/local/bin:" + path
} else {
    env["PATH"] = "/usr/local/bin"
}
task.environment = env


朋友们也可以使用
$PATH
查找可执行文件,但只提供“原始”C接口。

您可以通过以下方式执行命令:

例如:

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

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

从查找器启动(双击)时,
路径可能不同
从shell环境中的
路径
。如有必要,您可以添加 其他目录:

var env = task.environment ?? [:]
if let path = env["PATH"] {
    env["PATH"] = "/usr/local/bin:" + path
} else {
    env["PATH"] = "/usr/local/bin"
}
task.environment = env


朋友们也使用
$PATH
查找可执行文件,但只提供“原始”C接口。

hmm,似乎不适用于cowsay&fortune:s,output:env:cowsay:没有这样的文件或directory@Steven.B:什么是“cowsay”及其位置?它似乎位于/usr/local/bin/cowsay中,如果我回显$PATH=>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin,这就是我的输出。第一个路径应包含二进制文件:s@Steven.B:env cowsay
是否在命令行上工作?
类型cowsay
文件/usr/local/bin/cowsay
的输出是什么?“env-cowsay”似乎可以工作,“类型cowsay”的输出是“cowsay是散列的(/usr/local/bin/cowsay)”,当我运行file/usr/local/bin/cowsay“我得到”/usr/local/bin/cowsay:a/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/script可执行脚本时,ASCII文本“嗯,似乎对cowsay&fortune:s不起作用,输出:env:cowsay:没有这样的文件或directory@Steven.B:什么是“牛仔”“它在哪里?它似乎在/usr/local/bin/cowsay中,如果我回显$PATH=>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin,这就是我的输出。”。第一个路径应包含二进制文件:s@Steven.B:env cowsay
是否在命令行上工作?
类型cowsay
文件/usr/local/bin/cowsay
的输出是什么?“env-cowsay”似乎可以工作,“类型cowsay”的输出是“cowsay是散列的(/usr/local/bin/cowsay)”,当我运行file/usr/local/bin/cowsay“我得到”/usr/local/bin/cowsay:a/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/script可执行脚本时,ASCII文本“