go - 带有环境变量的 Go 中的 exec.Command()
问题描述
我想在 Go 中运行以下代码:
out, err := exec.Command("echo", "$PATH").Output()
结果是:
$PATH
而不是“PATH = / bin ...”的预期值。
为什么?我怎样才能得到期望值?
解决方案
您的命令没有被 shell 解释,这就是没有发生预期变量替换的原因。
从exec
包文档:
... os/exec 包故意不调用系统 shell,也不扩展任何 glob 模式或处理通常由 shell 完成的其他扩展、管道或重定向。
...
要扩展环境变量,请使用包 os 的 ExpandEnv。
因此,要在您的示例中达到预期的结果:
out, err := exec.Command("echo", os.ExpandEnv("$PATH")).Output()
值得查看用于获取环境变量并使用最适合您的特定用例的函数集:
func ExpandEnv(s string) string
- ExpandEnv 根据当前环境变量的值替换字符串中的${var} 或$var。对未定义变量的引用被空字符串替换。func Getenv(key string) string
- Getenv 检索由键命名的环境变量的值。它返回值,如果变量不存在,该值将为空。要区分空值和未设置值,请使用 LookupEnv。func LookupEnv(key string) (string, bool)
- LookupEnv 检索由键命名的环境变量的值。如果变量存在于环境中,则返回值(可能为空)并且布尔值为真。否则返回值为空,布尔值为假。
推荐阅读
- macos - :cached 和 :delegated 在 OSX 中挂载的卷性能
- javascript - 如何在 selenium java 中设计一个逻辑以根据问题在 2 个不同的路径之间切换
- c - FreeType 颜色渲染 FT_Load_Glyph 返回“未实现的功能”
- wpf - 将 XML 输入 XAML/PowerShell WPF 表单
- python - 拆分 Pandas 数据框
- cucumber - 黄瓜标签:类型不匹配:无法从 String[] 转换为 String
- jquery - Django 和 AJAX - replaceWith 不替换我的元素,它正在添加它而不是删除原始元素
- sql-server - 如何在维度表中查找未使用的行
- wcag2.0 - Web 可访问性:冗余链接 - 相邻链接指向标签的相同 URL
- python - 带有--keepdb的django测试用例不会在测试之间重置对象ID