在windows cmd控制台中,当我使用echo命令时:
echo abc //get: abc
echo "abc //get: "abc
echo "abc" //get: "abc"
然后我想使用exec包
以go语言运行它package main
import (
"fmt"
"os/exec"
)
func main() {
cmd1 := "echo abc def"
cmd2 := "echo abc\"edf"
cmd3 := `echo abc"edf`
cmd4 := `echo abc\"edf`
cmd5 := "echo abcedf你好"
fo(cmd1)
fo(cmd2)
fo(cmd3)
fo(cmd4)
fo(cmd5)
}
func fo(command string) {
cmd := exec.Command("cmd", "/C", command)
out, _ := cmd.Output()
fmt.Printf("%s => %s\n", command, string(out))
}
我得到了
echo abc def => abc def
echo abc"edf => abc\"edf
echo abc"edf => abc\"edf
echo abc\"edf => abc\\\"edf
echo abcedf你好 => abc??edf����
你可以看到它们(cmd1除外)都不对。 utf-8也没有正常显示。我不希望输出中的反斜杠(我认为问题实际上是在输入中没有输出,见下文)
我不能简单地对结果做一些事情(即从结果中删除反斜杠),因为它不适用于复杂情况。例如,我想运行
cmd /c start "echo abc & echo def"
我无法删除双引号,否则后一部分将在当前窗口中运行,而不是在启动窗口中运行。然后在go中,下面的代码不起作用:
cmd6 := "cmd /c start \"echo abc & echo def\""
fo(cmd6)
如何让它在golang中运行?
答案 0 :(得分:1)
直接使用echo怎么样?
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd1 := "abc def"
cmd2 := "abc\"edf"
cmd3 := `abc"edf`
cmd4 := `abc\"edf`
cmd5 := "abcedf你好"
cmd6 := "abc & echo def"
fo(cmd1)
fo(cmd2)
fo(cmd3)
fo(cmd4)
fo(cmd5)
fo(cmd6)
}
func fo(command string) {
cmd := exec.Command("echo", command)
out, _ := cmd.Output()
fmt.Printf("%s => %s\n", command, string(out))
}