Go 中的 exec.Command() 与环境变量

2023-12-30

我想在 Go 中运行以下代码:

out, err := exec.Command("echo", "$PATH").Output()

结果是:

$PATH

而不是“PATH=/bin...”的预期值。

为什么?我怎样才能得到期望值?


shell 没有解释您的命令,这就是预期的变量替换没有发生的原因。

来自exec包文档 https://golang.org/pkg/os/exec/:

...os/exec 包故意不调用系统 shell 并且不扩展任何全局模式或处理其他扩展, 管道,或通常由 shell 完成的重定向。

...

要扩展环境变量,请使用包 os 的 ExpandEnv。

因此,为了在您的示例中达到预期的结果:

out, err := exec.Command("echo", os.ExpandEnv("$PATH")).Output()

值得回顾一下用于获取环境变量并使用最适合您的特定用例的函数集:

  • func ExpandEnv(s string) string https://golang.org/pkg/os/#ExpandEnv- ExpandEnv 根据当前环境变量的值替换字符串中的${var} 或$var。对未定义变量的引用将替换为空字符串。
  • func Getenv(key string) string https://golang.org/pkg/os/#Getenv- Getenv 检索由键命名的环境变量的值。它返回值,如果变量不存在,则该值将为空。要区分空值和未设置的值,请​​使用 LookupEnv。
  • func LookupEnv(key string) (string, bool) https://golang.org/pkg/os/#LookupEnv- LookupEnv 检索由键命名的环境变量的值。如果环境中存在变量,则返回值(可能为空)并且布尔值为 true。否则返回值将为空并且布尔值将为 false。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go 中的 exec.Command() 与环境变量 的相关文章

  • 将 time.Time 转换为字符串

    我正在尝试将数据库中的一些值添加到 string在围棋中 其中一些是时间戳 我收到错误 无法在数组元素中使用 U Created date 类型 time Time 作为类型字符串 我可以转换吗time Time to string typ
  • 为什么 json.Unmarshal 返回映射而不是预期的结构?

    看看这个游乐场 http play golang org p dWku6SPqj5 http play golang org p dWku6SPqj5 基本上 我正在工作的图书馆收到了interface 作为参数 然后需要json Unma
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • 与通道相比,sync.WaitGroup 的优势是什么?

    我正在开发一个并发 Go 库 我偶然发现了 goroutine 之间两种不同的同步模式 其结果相似 等待组 https play golang org p ZYPLlcp16TZ package main import fmt sync t
  • 在 Go to 函数中通过引用和值传递

    我对 Go 中通过引用和值传递有点困惑 我已经看到过对类型前面的 的解释 在类型名称前面 表示声明的变量将存储该类型的另一个变量的地址 而不是该类型的值 类型 这对我来说毫无意义 在Java中 如果我将数据库实例传递给函数 我会这样做 da
  • 在 Golang 中运行外部 python,捕获连续的 exec.Command Stdout

    所以我的 go 脚本将像这样调用外部 python cmd exec Command python game py cmd Stdout os Stdout cmd Stderr os Stderr go func err cmd Run
  • golang无法启动调试,显示未找到框架CoreFoundation

    我使用的是 Macbook pro m1 在数据迁移或更新到 monterey 后 不确定是什么原因导致的 golang 似乎无法调试或 go list 编译 我尝试重新安装 更新 golang 结果是一样的 Go版本 1 17 3 dar
  • golang.org 包和标准库之间的区别

    我使用 go 已经有一段时间了 我注意到 Go 标准库 和 golang org x 之间存在重复的包 我的问题是 为什么它们被释放两次 在这两者中 我应该使用哪一个 更新的 规范的等 到目前为止我注意到的一些示例包已发布两次 golang
  • 将 stdin/stdout 从执行进程重定向到 Perl 中的管道

    我试图让执行子进程中的 STDOUT STDERR 通过 Perl 中的管道返回到父进程 我见过的最接近我想做的事情是 http forums devshed com perl programming 6 exec and redirect
  • 单值上下文中的多值错误

    我在编译 GO 代码时遇到此错误 multiple value fmt Println in single value context 我正在尝试创建一个函数 该函数接受可变数量的整数并将每个变量打印在一行上 GO package main
  • Golang 结构体初始化

    有一个像这样的简单结构 type Event struct Id int Name string 这两种初始化方法有什么区别呢 e1 Event Id 1 Name event 1 e2 Event Id 2 Name event 2 为什
  • 测试 gRPC 服务

    我想测试用 Go 编写的 gRPC 服务 我使用的示例是 Hello World 服务器示例grpc go 仓库 https github com grpc grpc go blob master examples helloworld g
  • json.Unmarshal json字符串到对象是空结果[重复]

    这个问题在这里已经有答案了 我有一个非常简单的程序 如下所示 package main import encoding json fmt type RunCommand struct level string json level call
  • 运行最新版本时没有“最新”消息?

    我正在尝试使用Sparkle https sparkle project org与 Qt Go 的绑定 https github com therecipe qt app 闪光 m import
  • 对嵌套结构使用自定义解组时,GoLang 结构无法正确解组

    我们需要对嵌套在多个其他结构中的结构使用自定义解组器 而这些结构不需要自定义解组器 我们有很多类似的结构B下面定义的结构 类似于嵌套A 代码的输出是true false 0 预期的true false 2 有任何想法吗 Go 游乐场示例he
  • 如何构建一个不链接到 musl libc 的 go 可执行文件

    So 官方的 Go 构建容器基于 Alpine 高山用途musl https www musl libc org 作为 libc 而不是 glibc 我需要在容器中构建一个可以在使用 glibc 的 Ubuntu 上运行的 Go 可执行文件
  • 杀死使用popen2创建的进程

    我正在使用函数 popen2 已在 stackoverflow 上的其他地方推荐 以编程方式创建一个必须在一段时间后再次终止的进程 popen2 返回一个 PID 我认为这个 PID 可以用来杀死该进程 但这种方式行不通 为了杀死它 我必须
  • 如何在 Go 中使用与包同名的变量名?

    文件或目录的常见变量名称是 path 不幸的是 这也是 Go 中包的名称 此外 在 DoIt 中更改路径作为参数名称 如何编译此代码 package main import path os func main DoIt file txt f
  • 结构体到磁盘的高效 Go 序列化

    我的任务是将 C 代码替换为 Go 而且我对 Go API 还很陌生 我正在使用 gob 将数百个键 值条目编码到磁盘页面 但 gob 编码有太多不需要的膨胀 package main import bytes encoding gob f

随机推荐

  • JNLP 文件无法从 Windows 10 上的 IE11 启动

    自 5 月 9 日起 Windows 10 更新后 在 IE11 11 0 40 上 JNLP 文件无法从 IE 启动 但在 IE 版本 11 0 34 的计算机上它可以完美运行 有任何想法吗 提前致谢 我在打开 jnlp 文件时遇到问题
  • 为什么 Redis 密钥不会过期?

    I have checked these questions but they did not help me to fix my issue I am using Redis as a key value store for Rate L
  • jQuery - 当滑动面板显示时绝对定位 div 的“左”位置动画

    我在屏幕左侧有一个隐藏面板 单击位于屏幕左侧的 选项卡 即可滑入视图 我需要面板滑过现有页面内容的顶部 并且需要选项卡随之移动 所以两者在css中都是绝对定位的 一切工作正常 除了我需要选项卡 以及选项卡容器 在面板显示时向左移动 因此它似
  • 从 azure web 应用程序发送 http 请求到我的机器

    我创建了一个发送 http 请求的 azure Web 应用程序 axios post http mypublicip 3000 write Name content data 1 同时我的电脑有一个正在运行的 Express 服务器 ap
  • 如何在 ASP.NET MVC 中生成完整的trace.axd?

    在我的应用程序上 启用后ASP NET 跟踪 http msdn microsoft com en us library y13fw6we VS 71 aspx在 ASP NET MVC 应用程序中 时间计算统计数据相差 5000 倍 我的
  • AF网络和网络错误

    我正在使用AFNetworking框架来发出多个 JSON Web 请求 在开发过程中 如果我未能提供所需的参数或服务开发人员损坏了某些东西 我会收到500 error 的错误块AFJSONRequestOperation正确地抓住了它 但
  • 在 Life ray 中自定义站点管理员角色的权限?

    我想自定义站点管理员角色权限 即我需要启用一项功能来创建用户以在相应站点下进行站点管理 我怎样才能做到这一点 我需要用 Hook 来实现它还是需要创建 EXT 或者任何其他更简单的方法来实现这一目标 我需要在相应站点下启用用户创建并为站点管
  • 著名:滚动视图中的滚动视图

    我正在尝试创建一个类似于 BBC 新闻本机应用程序的布局 使用known js 一个垂直的ScrollView 其中有许多水平的ScrollView 我已经 工作 到了一切都渲染并且水平滚动条完美工作的程度 我的问题是 如果用户在水平 Sc
  • 重命名文件扩展名而不指定

    我正在创建一个 bash shell 脚本 它将重命名文件扩展名 而无需指定旧的文件扩展名 如果我在 Linux 的终端中输入 change foo 它会将所有文件扩展名更改为 foo 假设我有四个文件 file1 txt file2 tx
  • 使用 Object.assign 更新嵌套对象

    我有以下对象 当用户单击按钮时 该对象将被分配一个新值 state title id imageId boarding id test work title id 我更新的对象如下所示 state title My img id 1234
  • 服务意图必须明确:意图

    我现在有一个应用程序 我在其中通过广播接收器 MyStartupIntentReceiver 调用服务 广播接收器中调用服务的代码是 public void onReceive Context context Intent intent I
  • 从 Razor 调用 ServiceStack 服务

    这里有一点边缘情况 我需要从 razor 同一网站 调用服务堆栈服务 现在我正在做 CheckIfConfiguredResponse aResponse new JsonServiceClient http localhost 2000
  • 在使用 AngularJS 的 Chrome 应用程序中,我可以直接将 ngSrc 指令用于内部图像吗?

    我正在使用 AngularJS 编写一个 Chrome 应用程序 我知道 当访问外部图像时 您必须执行跨源 XMLHttpRequest 并将它们作为 blob 提供 我有一堆内部图像 本地应用程序资源 它们遵循我想要在 ngRepeat
  • 选择容器后 JProfiler 远程进程列表为空

    我正在使用 JProfiler 12 并尝试通过 SSH 连接到 Docker 容器中的远程 JVM 进程 我已按照此处的说明进行操作 https www ej technologies com products jprofiler wha
  • 仅使用一元绑定语法表达 do 块

    据我所知 doHaskell 中的块只是一元绑定运算符的某种语法糖 例如 可以转换 main do f lt readFile foo txt print f print Finished to main readFile foo txt
  • uitableviewcell 的数据在滚动时相互重叠

    我有一个包含四个部分的表格视图 所有部分都有两个文本字段和一个位于不同行的标签 我添加了一些文本作为文本字段的占位符 最初 数据看起来很好 但是当我滚动表格视图时 单元格开始出现重叠的数据 My Code UITableViewCell t
  • 我如何检查是否已收到 Playwright 的回复?

    使用 Java 我试图等待对我正在等待的 Javascript 脚本之一的响应 我已经发现我可以使用等待响应 https playwright dev java docs api class page page wait for respo
  • React.js 中的 setState 与 refs

    我在反应中创建了选项卡 现在单击我必须更改选项卡的类 选项卡类可能如下 1 active2 上一个活动3 已选择 单击选项卡类后将变为active并在使用前检查是否已选择alreadySelected类和active最后一个活动选项卡中的类
  • 如何将多个 PNG 合并为一个大 PNG 文件?

    我有大约 6000 个 PNG 文件 256 256 像素 并希望将它们组合成一个大 PNG 以编程方式保存所有这些文件 最好 最快的方法是什么 目的是在纸上打印 因此使用某些网络技术不是一种选择 拥有一个单一的图片文件将消除许多使用错误
  • Go 中的 exec.Command() 与环境变量

    我想在 Go 中运行以下代码 out err exec Command echo PATH Output 结果是 PATH 而不是 PATH bin 的预期值 为什么 我怎样才能得到期望值 shell 没有解释您的命令 这就是预期的变量替换