while和ssh連用的誤區


    今天聽到同事,說了whilessh連用的從定向問題,然後baidu了下,特此總結。

詳見:http://blog.csdn.net/shrekmu/article/details/2513177

 

         for循環中,沒有此問題。

 

         原因:while循環中,使用了重定向機制,被讀取文件中的信息都已經讀入並重定向給了整個while語句。所以當我們在while循環中再一次調用read語句,就會讀取到下一條記錄。問題就出在這裏,ssh語句正好讀取輸入的所有信息

 

         解決辦法:while循環中的ssh語句的最後,加上< /dev/null,即可。

格式:

cat file|while read LINE

do

      echo ********************************$LINE

      ssh  $LINE cat </dev/null

done

 

實例1:常見的錯誤

 

[root@ tmp]# cat date

172.21.34.20

172.21.34.23

172.21.34.22

 

[root@ tmp]# vi while_ssh.sh

 

#!/bin/bash

while read LINE

do

      echo ********************************$LINE

      ssh  $LINE cat

done < date

 

 

[root@ tmp]# sh -x while_ssh.sh

+ read LINE

+ echo   '********************************172.21.34.20'

********************************172.21.34.20

+ ssh -p 10060 172.21.34.20 cat

172.21.34.23

172.21.34.22

+ read LINE

 

 

實例2:解決辦法


[root@   tmp]# cat date

172.21.34.20

172.21.34.23

172.21.34.22

 

[root@   tmp]# vi while_ssh.sh

 

#!/bin/bash

while   read LINE

do

    echo   ********************************$LINE

    ssh  $LINE cat </dev/null

done   < date

 

 

[root@   tmp]# sh -x while_ssh.sh   

+   read LINE

+   echo '********************************172.21.34.20'

********************************172.21.34.20

+ ssh   -p 10060 172.21.34.20 cat

+   read LINE

+   echo '********************************172.21.34.23'

********************************172.21.34.23

+ ssh   -p 10060 172.21.34.23 cat

+   read LINE

+   echo '********************************172.21.34.22'

********************************172.21.34.22

+ ssh   -p 10060 172.21.34.22 cat

+   read LINE


 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章