当前位置: 首页 > 面试题库 >

golang无法在终端上运行的exec命令

广楚
2023-03-14
问题内容

尝试使用exec程序包运行mv命令时出现错误。

这是我要html" target="_blank">执行的操作的一个示例:

cmd := exec.Command("mv", "./source-dir/*", "./dest-dir")
output, err := cmd.CombinedOutput()

cmd.Run()

err返回以下内容 exit status 1

输出返回此 mv: rename ./source-dir/* to ./dest-dir/*: No such file or directory

当我更改此行时,实际上可以使脚本工作:

cmd := exec.Command("mv", "./source-dir/*", "./dest-dir")

到以下内容:

cmd := exec.Command("mv", "./source-dir/file.txt", "./dest-dir")

该命令可以正常运行并成功移动文件,但无法使用通配符。在命令中似乎没有将星号用作通配符。这是为什么?还有其他在GO中使用通配符的方法吗?如果没有,那么我将如何将所有文件从递归移动source- dirdest-dir

谢谢


问题答案:

在外壳程序上键入命令时,外壳程序将./source_dir/*使用所有匹配文件的列表并将其替换,每个参数一个。该mv命令将看到文件名列表,而不是通配符。

您需要做的是自己做同一件事(使用filepath.Glob返回[]string匹配文件的a),或者调用外壳程序使其能够完成工作(使用exec.Command("/bin/sh", "-c", "mv ./source_dir/* ./dest_dir"))。



 类似资料:
  • 我安装mercurial使用sudo apt-get安装mercurial和它安装正确。但是当我运行任何hg命令时,我都会收到以下错误消息- 中止:在中找不到mercurial库3.3.3.2.2-3.2-3.2.2.2-3.2.2-3.2-3.2-3.2-2.2-3.2-3.3.4-4.4.4.4.4/7/7/7/7/7/7/7/7/4.4/7/7/4.3.2.2.2-3.2-3.2-3.2-3

  • myStr是上面我要执行的整个命令吗? 我已经尝试过的事情: 给了我一个错误: 它运行起来像一个魅力,但不是通过runtime.exec()。

  • 这篇文章为远程执行提供了一个解决方案:如何使用Terraform配置启动远程服务? 我正在尝试对本地exec provisioner执行相同的操作。 我需要在远程节点上打开ssh隧道: 隧道已创建,但Terraform不会继续下一步。 如果我将ssh命令替换为: 有什么想法吗?

  • 我有一个Spring Boot2项目,这是一个ReST API,我正在使用Spring ReST。 我正在使用2个插件来生成一个SDK其他项目导入调用我的API。第一个插件是以生成swagger-codegen-spec文件,第二个插件是,以生成实际的SDK文件作为另一个mvn项目。 最后,我实现了组件测试自动化,这些组件测试使用SDK对正在运行的API运行测试。 我的目标是实际构建SDK作为原始

  • 问题内容: 我在弄清楚如何使用os / exec包运行多个命令时遇到了麻烦。我已经摸索了网络和stackoverflow,还没有找到任何适合我的案例。这是我的资料来源: 我想要命令,就像从终端一样。 因此,我需要依次运行每个命令,并等待最后一个命令完成后再继续。在当前版本的代码中,当前假设是因为执行cd path并在新的shell中执行了./configure,而不是与上一个命令位于同一目录中。有

  • 我使用wkhtmltopdf从html生成pdf,我试图通过PHP exec()函数运行下面的命令,但它不生成pdf,我没有显示任何错误,虽然。但是当我通过命令行运行相同的命令时,它就工作了。 下面是我用来执行pdf生成命令的PHP代码taht。 有关我的设置的一些信息: 操作系统-Ubuntu 12.04 PHP版本 任何帮助将不胜感激,谢谢。