gpt4 book ai didi

go - 直接运行 bash 命令与通过 exec.Command 运行的结果不同

转载 作者:IT王子 更新时间:2023-10-29 01:44:45 26 4
gpt4 key购买 nike

在 Linux 操作系统上,运行“realpath ~/bin”给出正确的路径“/home/user1/bin”。

但是当我按如下方式运行它时:

cmd := exec.Command("realpath", "~/bin")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
panic(err)
}
fmt.Println("Realapth:", out.String())

我遇到了 panic :退出状态 1

顺便说一句:使用如下命令:

cmd := exec.Command("realpath", "--help")

我可以获得关于realpath 命令的正确帮助信息。我认为这意味着它确实在我的可执行路径中。

最佳答案

如果您在 shell(例如 bash)中运行命令,一个 tilde-prefix在传递给 realpath 之前由 shell 展开。

但是,如果您在 go 应用程序中运行它,波浪号将保持原样并且 realpath 将其假定为路径名的一部分。要查看差异,您可以在 shell(Linux 操作系统)中尝试以下命令:

//1. correctly expanded
realpath './bin'

//2. tilde not expanded
realpath '~/bin'

//3. tilde expansion
realpath ~/bin

(2)应该是失败了,你的go应用中的情况和这个差不多。要验证,请按如下方式更改您的代码:

cmd := exec.Command("realpath", "~/bin")
var out bytes.Buffer
var serr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &serr
err := cmd.Run()
if err != nil {
fmt.Printf("Error = %v, %v\n", err, serr.String())
panic(err)
}
fmt.Println("Realapth:", out.String())

您应该能够观察到 realpath 命令产生的错误消息。

关于go - 直接运行 bash 命令与通过 exec.Command 运行的结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43960281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com