直接运行bash命令和通过exec.Command之间的结果不同

时间:2017-05-14 04:09:29

标签: go command exec

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

但是当我按照下面的方式运行时:

panic: exit status 1

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

BTW:使用以下命令:

realpath

我可以获得{{1}}命令的正确帮助消息。我认为这意味着它确实在我的可执行路径中。

1 个答案:

答案 0 :(得分:1)

如果你在shell中运行命令(例如bash),shell会扩展tilde-prefix,然后传递给realpath

但是,如果您在go应用程序中运行它,则tilde保持不变,realpath将其视为路径名的一部分。要查看差异,可以在shell(Linux OS)中尝试以下命令:

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

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

//3. tilde expansion
realpath ~/bin

(2)应该失败,你的应用程序中的情况与此类似。要进行验证,请按以下步骤更改您的密码:

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命令产生的错误消息。