为了账号安全,请及时绑定邮箱和手机立即绑定

Go:在 exec.Command 中使用字符串时出现奇怪的结果

Go:在 exec.Command 中使用字符串时出现奇怪的结果

Go
慕标琳琳 2021-08-16 16:21:12
我有一个处理 Linux CLI 命令及其参数的 Go 函数:func cmd(cmd string, args ...string) ([]byte, error) {    path, err := exec.Command("/usr/bin/which", cmd).Output()    if err != nil {        return []byte(""), err    }    response, err := exec.Command(string(path), args...).Output()    if err != nil {        response = []byte("Unknown")    }    return response, err}由以下调用:func main() {    uname, err := cmd("uname", "-a")    fmt.Println(string(uname))}“which”命令返回二进制文件的正确路径,但是当它尝试使用动态路径运行第二个 exec 命令时,返回始终是:fork/exec /usr/bin/uname: no such file or directoryexit status 1然而,如果第二个 exec 命令是硬编码的,一切都会按预期工作并打印 uname:response, err := exec.Command("/usr/bin/uname", args...).Output()我是否缺少有关 exec 和字符串行为方式的信息?
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

which命令在可执行文件的名称后面打印一个换行符。该path变量设置为"/usr/bin/uname\n"。此路径没有可执行文件。额外的换行符在错误消息中可见(“:”之前的换行符)。

修剪换行符后缀以获得可执行文件的正确名称:

 response, err := exec.Command(strings.TrimSuffix(string(path), "\n"), args...).Output()


查看完整回答
反对 回复 2021-08-16
  • 1 回答
  • 0 关注
  • 363 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信