2013-03-02 189 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無路可走)