gpt4 book ai didi

Swift Process - 执行命令错误

转载 作者:搜寻专家 更新时间:2023-10-31 22:28:24 25 4
gpt4 key购买 nike

我正在尝试从用 Swift 编写的 Mac 应用程序执行“历史记录”命令。

@discardableResult
func shell(_ args: String...) -> Int32 {
let task = Process()
task.launchPath = "/bin/bash"
task.arguments = args
task.launch()
task.waitUntilExit()
return task.terminationStatus
}

shell("history")

它总是返回这个错误:

env: history: No such file or directory

怎么了?真的可以从 Mac 应用程序使用用户命令行历史记录吗?

最佳答案

NSTask 中使用某些内置的 GNU 命令(被认为像 history 一样“交互式”)通常需要设置环境变量以便 shell 知道返回什么,例如:

private let env = NSProcessInfo.processInfo().environment

这可能很困难,因为显然并非所有用户都为此使用相同的环境变量或 shell。另一种方法是在不需要获取/设置环境的 NSTask 中使用 bash 命令:

let task = Process()
task.launchPath = "/bin/bash"
task.arguments = ["-c", "cat -n ${HOME}/.bash_history"]

let pipe = Pipe()
task.standardOutput = pipe
task.launch()

let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)

print(output!)

结果输出应该类似于实际 shell 历史的编号格式。

关于Swift Process - 执行命令错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43266759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com