1 回答
TA贡献1843条经验 获得超7个赞
它给了我一个 2 行输出。我想将这些行保存到下面的结构中
您的问题确实与 SSH 无关。你有一个[]byte
代表你的命令输出的。你想把它分成两个字符串。
strings.SplitN
是这个的完美解决方案。您将原始字符串([]byte
必须将其转换为)、分隔符(\n
在您的情况下)和要返回的最大字符串数传递给它。对于我们来说,我们最多需要 2 个字符串。怎么可能不止一个\n
? pwd
返回一个目录,目录的名称中可以有换行符,尽管在实践中很少这样做。
out := []byte("myhost\n/dir")
fmt.Println(string(out))
strs := strings.SplitN(string(out), "\n", 2)
res := Result{Hostname: strs[0], PWD: strs[1]}
out := []byte("myhost\n/dir")
fmt.Println(string(out))
strs := strings.SplitN(string(out), "\n", 2)
res := Result{Hostname: strs[0], PWD: strs[1]}
https://go.dev/play/p/5ENSgAPg3ER
combo, err := session.CombinedOutput("hostname;pwd")
请记住,stderr
除了stdout
. 我想不出任何一个命令都会向 生成任何输出的情况stderr
,但请记住,您没有区分这两者。希望您正在检查的结果,err
如果不是nil
,则不使用命令的结果。这应该可以保护您免受 stdout 和 stderr 组合的意外结果的影响。如果 stderr 与您无关,您可能想ssh.Session.Output
改用
- 1 回答
- 0 关注
- 70 浏览
添加回答
举报