登录
首页 >  Golang >  Go问答

Golang中的exec.Cmd执行代码时提示“找不到指定的文件或目录”,请求帮助

来源:stackoverflow

时间:2024-02-08 19:57:26 111浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《Golang中的exec.Cmd执行代码时提示“找不到指定的文件或目录”,请求帮助》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

当我尝试使用 exec 在 golang 中的 cmd 上执行以下代码时,“没有这样的文件或目录”。 这基本上是因为该路径中的空格 ->

/users/ltuser/library/application support/google/chrome beta/default

在 macos 中的 golang cmd 中使用 exec 命令执行时如何转义空格?

cmdStr := fmt.Sprintf("find /Users/ltuser/Library/Application Support/Google/Chrome Beta/Default -mindepth 1 ! -name Preferences -delete")
        args := strings.Fields(cmdStr)
        cmd := exec.Command(args[0], args[1:]...)
        op, err := cmd.CombinedOutput()
        if err != nil {
            fmt.Println("error",err.Error())
        }

正确答案


"find /users/ltuser/library/application support/google/chrome beta/default -mindepth 1 ! -name preferences -delete"

区分 exec.command 和 shell 语句很重要。当您在“命令行”运行时,您是在 shell 中运行它们。这使您可以使用 | 创建管道,使用 <> 等进行重定向,使用变量等等。它具有用于执行 $path 中的可执行文件的特定语法,例如 find。在 shell 语法中,将在空格周围解析字符序列 executable arg1 arg2 arg3executable,如果在路径中找到程序,将以exec执行。参数以空格分隔,将成为exec的参数。

这就是为什么当您在 shell 上运行 find 这样的命令时,如果要将 /users/ltuser/library/application support/google/chrome beta/default 这样的字符串作为一个参数传递,则必须将它们括起来。

但是即使您将命令表示为一系列字符串分隔值,您也不会在 shell 上运行它。这就是为什么你

args := strings.fields(cmdstr)

这就是带有空格的路径变成多个参数的地方。

exec.command 具有类似于 os exec 的界面,因为它用于为您执行命令。这就是为什么它需要一个字符串列表;不需要进行解析,也不需要对字符串中的字符进行转义。

所以只需将代码中的参数分开,然后将它们直接传递给 exec.command

cmd := exec.Command("find", 
   "/Users/ltuser/Library/Application Support/Google/Chrome Beta/Default", 
   "-mindepth",
    ... ... ...,
)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>