开源 issue: https://github.com/trzsz/trzsz-ssh/issues/46
复现 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
是想避免解释每一个具体的参数是什么,有双引号,有空格,有转义,要准确地解释出每一个参数不简单啊。
大佬们有什么好想法吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.