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 arg3
。 executable
,如果在路径中找到程序,将以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学习网公众号。
-
502 收藏
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
139 收藏
-
204 收藏
-
325 收藏
-
477 收藏
-
486 收藏
-
439 收藏
-
357 收藏
-
352 收藏
-
101 收藏
-
440 收藏
-
212 收藏
-
143 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习