Go exec.Command如何中断对sed的调用?

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() {

我正在尝试从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() {
        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文件……这是一个配置文件。不可由用户编辑。我写的。