Golang中exec.Command执行bash命令无输出问题求助
在Go中通过source文件获取环境变量的问题解决办法
你的问题出在管道命令的进程隔离上:source fileName和echo $INFO通过|分隔后,属于两个独立的bash进程。source加载的变量只在第一个bash进程的内存中生效,第二个执行echo的bash进程完全看不到这个变量,自然没有输出。
把两个命令放在同一个bash进程里执行就能解决,用&&或者分号连接替代管道:
cmd1 := exec.Command("bash", "-c", "source fileName && echo $INFO") out, err := cmd1.Output() if err != nil { log.Fatalf("cmd.Run() failed with %s\n", err) } fmt.Printf("combined out:\n%s\n", string(out))
如果需要读取多个变量,也可以把逻辑写成多行shell代码块,同样用bash的-c参数执行:
cmd1 := exec.Command("bash", "-c", ` source fileName echo "INFO: $INFO" echo "OTHER_VAR: $OTHER_VAR" `)
这样所有命令都在同一个bash会话中运行,source加载的环境变量就能被后续命令正常读取。
内容的提问来源于stack exchange,提问作者HSAR
相关产品推荐
相关产品推荐

