gpt4 book ai didi

go - 执行命令时出现问题,其中包含奇怪的字符

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:12 27 4
gpt4 key购买 nike

我正在尝试调用内置函数 find 来打印子文件夹 my-files 中所有文本文件的内容。我知道有更简单的方法可以做到这一点,但我需要让它与 exec 一起工作。我怀疑 exec 没有正确处理引号。我的初始代码如下:

fullCmd := "find my-files -maxdepth 1 -type f"
cmdParts := strings.Split(fullCmd, " ")
output, _ := exec.Command(cmdParts[0], cmdParts[1:]...).CombinedOutput()
fmt.Println("Output is...")
fmt.Println(string(output))

这工作正常并打印出来

Output is...
my-files/goodbye.txt
my-files/badfile.java
my-files/hello.txt

但是,当我尝试开始添加“更奇怪”的字符时,它就崩溃了。如果我将第一行更改为

fullCmd := "find my-files -maxdepth 1 -type f -iname \"*.txt\""

没有打印出来。更糟糕的是,如果我将行更改为:

fullCmd := "find my-files -maxdepth 1 -type f -exec cat {} \\;"

用这个标准输出找出错误:

Output is...
find: -exec: no terminating ";" or "+"

我以为我正确地转义了必要的字符,但我想不是。关于如何使命令工作的任何想法?作为引用,当直接在命令行上输入时,此命令完全符合我的要求:

find my-files -maxdepth 1 -type f -iname "*.txt" -exec cat {} \;

最佳答案

它与“怪异”字符无关。 \"*.txt\"" 是为你的 shell 引用的,但你没有在你的 shell 中运行它。它应该只是 *.txt,这是您希望 find 接收的实际参数作为 -iname 的值:

fullCmd := "find my-files -maxdepth 1 -type f -iname *.txt"

虽然,因为这不是 shell,所以我强烈建议不要使用这种将类似 shell 的命令构建为单个字符串并按空格拆分的方法;只需首先将 args 作为数组提供,以避免这样的混淆。

关于go - 执行命令时出现问题,其中包含奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56547041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com