复现 demo:
package main
import (
"fmt"
"os/exec"
)
func main() {
command := `"C:\WINDOWS\System32\OpenSSH\ssh.exe" -V`
// command = `"C:\Program Files\ssh.exe" -V`
cmd := exec.Command("cmd", "/c", command)
output, _ := cmd.CombinedOutput()
fmt.Println(string(output))
}
错误输出:
'\"C:\WINDOWS\System32\OpenSSH\ssh.exe\"' is not recognized as an internal or external command,
operable program or batch file.
原始问题,用户在 ~/.ssh/config 中配置任意的 ProxyCommand,要用 os/exec 来执行它,并且获取它的标准输出。用 cmd /c 是想避免解释每一个具体的参数是什么,有双引号,有空格,有转义,要准确地解释出每一个参数不简单啊。
大佬们有什么好想法吗?