2013-03-02 133 views
0

我不清楚有关标准输出和ssh beacasuse的标准错误,如果我执行说:stderr和stdout的ssh?

SSH用户@ remotemachine_ip“一些命令” 我得到的输出瞬间在屏幕上还是可能会出现一些错误

1 .loged在使用ssh

2.远程命令被远程机器显示在远程计算机(或标准错误STDOUT),我可以看到

3.输出上执行。 然后它回到本地机器。

输出回来到本地机器上的标准输出,并且可以附加到本地计算机上的文件。

所以,如果我在本地计算机有一个for循环

for i in ip1 ip2 
do 
ssh [email protected]_ip "some command" 
done 

什么是错误重定向的最佳途径,就是它依赖于,同时,直到循环

什么如果不是SSH我我使用一些expect脚本

expectscript.exp [email protected]_ip "some command"

+0

你的问题不是很清楚。你想要做什么?没有单一的“最佳方式”,这取决于你需要什么。 – Barmar 2013-03-02 08:22:32

+0

我真的有问题,在多个ipaddress的for循环中指挥ssh的输出,但我只得到第一个ip的输出(如果重定向在for循环内)或最后一个ip(在redircetion不在的情况下方) – munish 2013-03-02 08:41:02

+0

您发布的代码中没有重定向,因此很难说出您做错了什么。将问题发布到代码中,不要只是笼统地描述它。 – Barmar 2013-03-02 09:07:40

回答

2

SSH是一种协议,它可以让您登录到远程町就像你会在本地机器上登录一样。

如果您运行登录shell本地机器(说的Ctrl + Alt + F1~6之一),它开始为用户和输出(stdoutstderr)的新外壳顺利,你的显示器上。

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

但是如果你要将stdout和/或stderr重定向到一个文件,当你在远程机器上的shell中时,该文件将在远程机器上,因为你真正的程序运行在远程机器上执行。

顺便说一句SSH不仅仅是向/从远程机器发送/接收数据,它还加密数据和更多。

+0

谢谢@Tux如果可能的话,你可以给一个循环内的重定向的例子多个ips.does循环的问题,因为我有多个ipaddress重定向和输出被附加到一个日志文件,所以我想了解ssh如何工作 – munish 2013-03-02 08:43:54

2
for ip in ip1 ip2 
do 
    ssh [email protected]$ip "some command" > output.$ip 2>&1 
done 

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

for ip in ip1 ip2 
do 
    ssh [email protected]$ip "some command" 
done > output 2>&1 

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

0

什么是错误的重定向

最好的方式,如果我专注逼到标准错误重定向,下面可能是解决方案之一:

for ip in ip1 ip2 
do 
    ssh [email protected]$ip "some command" >output.$ip 2>output.$ip.err 
done 

SSH看起来支持远程标准输出到本地stdout和远程stderr到本地stderr,以便上面的脚本按我的预期运行。

0

如果你把

ssh [email protected]$ip "some command" >output.$ip 2>output.$ip.err 

内预计脚本stdout重定向和stderr将被忽略(预计将截取重定向输出。里面的期待脚本,你可以添加LOG_USER 0并调用你的脚本与stdout重定向,这将工作(尽管stderr无路可走)