sder的stderr和stdout?

时间:2013-03-02 08:02:28

标签: ssh expect output

我不清楚ssh beacasuse的stdout和stderr如果我执行说:

ssh user @ remotemachine_ip“some command” 我立即在屏幕上获得输出或可能是一些错误

1.使用ssh

2.远程计算机上执行远程命令

3.输出显示在我可以看到的远程机器(stderr或stdout)上。 然后它回到本地机器。

输出返回本地计算机的标准输出,可以附加到本地计算机上的文件中。

所以如果我在本地机器上有一个for循环

for i in ip1 ip2
do
ssh user@remotemachine_ip  "some command" 
done

错误重定向的最佳方法是什么,它依赖于for while while循环

如果不使用ssh我会使用一些期望脚本

expectscript.exp user@remotemachine_ip "some command"

4 个答案:

答案 0 :(得分:3)

SSH是一种允许您登录远程计算机的协议,就像您在本地计算机上登录一样。

如果您运行登录shell(例如Ctrl + Alt + F1~6之一),则在本地计算机中,它会为用户启动一个新shell,并且输出(stdoutstderr)正确在你的显示器上。

现在让我们来看看你的SSH情况,步骤与上次类似,只有一个区别,而不是将输出(再次stdoutstderr)发送到监视器,服务器将数据发送回您登录的计算机 - SSH client。客户端在本地计算机上运行,​​因此只在本地计算机的监视器上显示相同的输出。

但是如果您要将stdout和/或stderr重定向到文件,当您在远程计算机上的shell中时,该文件将位于远程计算机上,因为你正在运行的实际程序是在远程机器上执行的。

BTW SSH不仅仅是向远程计算机发送数据/从远程计算机接收数据,还可以对数据进行加密等等。

答案 1 :(得分:3)

for ip in ip1 ip2
do
  ssh user@$ip "some command" > output.$ip 2>&1
done

会将输出放在每个IP的单独文件中。

for ip in ip1 ip2
do
  ssh user@$ip "some command"
done > output 2>&1

将所有输出放在一个文件中。

答案 2 :(得分:1)

  

错误重定向的最佳方法是什么

如果我专注于stderr重定向,以下可能是解决方案之一:

for ip in ip1 ip2
do
  ssh user@$ip "some command" >output.$ip 2>output.$ip.err
done

ssh look支持远程stdout到本地stdout,远程stderr到本地stderr,以便上面的脚本按照我的预期运行。

答案 3 :(得分:0)

如果你把

ssh user@$ip "some command" >output.$ip 2>output.$ip.err

期望脚本中,stdoutstderr的重定向将被忽略(期望将拦截重定向的输出。在 expect 脚本您可以添加 log_user 0 并调用stdout重定向的脚本,这样就行了(虽然stderr无处可去)

相关问题