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

标签 swift macos swift3 swift2 swift4

我正在尝试从我的 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 utility argument ...

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

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

从 Finder 启动时(双击)PATH可能不同
来自 PATH在你的 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

execlp 和 friend 也可以使用 $PATH 找到可执行文件但仅提供“原始”C 接口(interface)。

关于Swift mac 应用程序,在不知道路径的情况下运行终端命令(因此它会查看 $PATH 中的每个路径)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41525743/

相关文章:

xcode - 将 SKNode 添加到 SpriteKit

swift - 如何比较一个函数以便触发另一个函数

swift - 使用 AVAudioPlayer 解包 Optional 值时意外发现 nil

swift - 使用 Swift 3 调试 Firebase

ios - Swift 中的正则表达式,很难让它工作

macos - 如何隐藏 Dock 图标

java - 使用 IntelliJ 设置 Scala

swift - cocoa 图形故障

swift - 如何在 iOS 上的 Swift 中使用 Big5 编码

ios - 视频中的照片上的自定义动画