获取正确的环境变量
哈喽!今天心血来潮给大家带来了《获取正确的环境变量》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!
问题内容我正在编写一个 go 实用程序,需要使用命令 which
来获取有关程序是否在 $path 中的信息,但我注意到,虽然我的程序在从终端启动时可以工作,但它不起作用如果双击打开。
我使用的代码非常简单:
wichJavaOutput, err := Command("which", "java").CombinedOutput()
if err != nil {
return err.Error(), err
}
问题是这仅部分有效,如果 java 通过包管理器安装并且位于公共文件夹中,则可以轻松找到它,但 java 是手动安装并添加到 ~/.bashrc
或 ~ 中。 /profile
它不起作用。
我通过使用 os.getenv
获取 $path
进行了一对测试,显然......
如果我通过终端启动程序, $path
也包含 ~/.bashrc
和 ~./profile
的部分,但是如果我通过双击启动它,它会找到 $path
的所有部分,除了那个部分在这两个文件中,考虑到它可能是加载 ~/.bashrc
和 ~./profile
的 shell,这有点有意义,所以我尝试执行 /bin/sh -c which java
或 /bin/bash -c哪个 java
可以工作,但也不起作用,所以问题来了:
如何在 go 中获取环境变量并在终端中获得正确的环境变量?
解决方案
您看到的问题是因为通常当在 GUI 中双击程序来运行该程序时,PATH
环境变量会设置为默认值。但是,当您的程序在终端中运行时,它会从终端继承 PATH
值。
这里要做的事情是始终使用 PATH
并让用户在想要不同的行为时适当地配置其 GUI 会话。人们总是设置不同的 PATH
值,有时只是通过更改目录来设置,并且您无法知道用户希望它从用户的 shell 配置中猜测什么。
此外,即使您想调用用户的 shell,它也不总是 bash(我使用 zsh),也不总是符合 POSIX 的 shell(例如,tcsh
、fish
等),所以有没有一组命令可以调用 SHELL
中的程序,并且始终会产生正确的结果。
如果您的程序确实需要从终端运行,那么您应该发送一个 .desktop
文件,指示它应该从终端运行,然后就会生成一个文件。否则,要么指定一个命令行选项,让用户覆盖搜索,要么像其他程序一样使用 PATH
。
今天关于《获取正确的环境变量》的内容介绍就到此结束,如果有什么疑问或者建议,可以在编程网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341