我正在 swift 中为 mac os 开发控制台应用程序,我想在调用 bash 命令时访问用户环境变量。我使用以下代码在 swift 中运行 bash 命令:
@discardableResult
func shell(_ command: String) -> String? {
let task = Process()
task.launchPath = "/usr/bin/env"
task.arguments = ["bash", "-c", command]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = String(data: data, encoding: String.Encoding.utf8)
return output
}
当我在终端中运行 /usr/bin/env
时,我看到所需的变量,但是当我在中运行 shell("/usr/bin/env")
时代码我没有看到。 ProcessInfo.processInfo.environment["MY_ENV_VAR"]
也没有向我显示所需的变量。
如何在 swift 中访问用户定义的环境变量?
最佳答案
我最近一直在努力解决一个非常相似的问题。虽然我没有为您提供完美的解决方案,但我确实有一些建议。
首先,MY_ENV_VAR
的具体定义位置确实很重要。如果它位于 .bashrc
文件内,则需要使用 -i
以交互模式启动 bash,以便它读取该文件。如果它是在 .bash_profile
中定义的,则需要使用 -l
来启动所谓的登录 shell。
在我的特定情况下,我必须同时使用 -i
和 -l
来查看我想要的环境变量。如果用户不使用 bash,这一切都会变得更加复杂。例如,我使用 Fish,因此无论 bash
调用如何,我所需的 ENV 变量对于 bash 根本不可见。
所以,我实际上要做的是首先确定正在使用的 shell,然后使用 -i -l -c
调用该 shell。 zsh、bash 和 Fish 都支持这些选项。
这真的很痛苦,我什至不确定这个方法是否可靠。但是,它在许多不同的用户环境中都为我工作。
关于swift - 在 Swift for macos 中访问用户环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54724324/