将ssh / shell命令的输出存储为常规字符串

时间:2014-05-04 23:39:31

标签: ruby shell ssh scripting

我想将ssh命令的输出存储为字符串,以便我可以围绕它编写脚本,如下所示:

ssh_command = %x(ssh -t -t user@ip.ip.ip.ip)

问题在于'ssh_command'实际上似乎并不存储任何字符串。 它应该存储(对于无效的IP):

ssh: connect to host ip.ip.ip.ip port 22: No route to host

它确实在irb中输出它,但不是'ssh_command'变量引用的字符串。

有趣的是,以下工作符合预期:

uname_cmd = %x(uname -a)

在这种情况下,当我打印'uname_cmd'时,我会按预期获得字符串输出。

所以我的问题是,有没有办法将ssh命令的输出存储为常规字符串,就像它与uname一起工作?

谢谢,

1 个答案:

答案 0 :(得分:2)

%x(..)捕获stdout,而ssh错误消息写入stderr。

您可以将stderr重定向到stdout,以便使用shell重定向语法2>&1捕获它们:

ssh_command = %x(ssh -t -t user@ip.ip.ip.ip 2>&1)