Go exec.Command如何中断对sed的调用?
我正在尝试从go运行以下命令 sed-i's |/home/output | | g'/tmp/results.json 它从文件/tmp/result.json中删除/home/output 如果我在终端上运行它,它工作得很好。然而,我不明白为什么它不喜欢由go exec运行 这是我的密码Go exec.Command如何中断对sed的调用?,go,sed,Go,Sed,我正在尝试从go运行以下命令 sed-i's |/home/output | | g'/tmp/results.json 它从文件/tmp/result.json中删除/home/output 如果我在终端上运行它,它工作得很好。然而,我不明白为什么它不喜欢由go exec运行 这是我的密码 package main import ( "fmt" "log" "os" "os/exec" ) func main() {
package main
import (
"fmt"
"log"
"os"
"os/exec"
)
func main() {
cmd := exec.Command("sed", "-i", "'s|/octane/data||g'", "./results.json")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
if err := cmd.Wait(); err != nil {
log.Fatal(err)
}
}
具体错误是:
sed: -e expression #1, char 1: unknown command: `''
2018/03/07 11:48:01 exit status 1
是什么导致了这种意外行为?请尝试以下操作:
cmd := exec.Command("sed", "-i", "s|/octane/data||g", "./results.json")
错误的引用问题
单引号对于shell是必需的,但对于exec.Command调用则不是。请尝试以下操作:
cmd := exec.Command("sed", "-i", "s|/octane/data||g", "./results.json")
错误的引用问题
单引号对于shell是必需的,但对于exec.Command调用则不是。特别是,Go直接调用命令,而不是通过shell,因此不必转义或引用shell可能特别处理的字符。这是我通过反复试验发现的。它实际上是从一个带有单引号的toml文件中提取命令。++ve获得了一个很好的答案,先生:)哦,我希望你从一个可信的来源获得那些toml文件……这是一个配置文件。不可由用户编辑。我写的。特别是,Go直接调用命令,而不是通过shell,因此不需要转义或引用shell可能特别处理的字符。谢谢,这是我通过反复试验发现的。它实际上是从一个带有单引号的toml文件中提取命令。++ve获得了一个很好的答案,先生:)哦,我希望你从一个可信的来源获得那些toml文件……这是一个配置文件。不可由用户编辑。我写的。