脚本仅处理输入文件的第一行

时间:2019-01-23 15:40:12

标签: linux bash

bash脚本可读取文件并远程处理命令。 当前仅处理第一行(服务器1)

需要在server1上远程处理3个命令,然后在server2上远程处理......

#!/bin/bash

while read line; do
    sshpass -f password ssh -o StrictHostKeyChecking=no user@$line zgrep "^A30=" /var/tmp/logs1/messages.* |  >> Output.txt
    sshpass -f password ssh -o StrictHostKeyChecking=no user@$line zgrep "^A30=" /var/tmp/logs2/messages.* |  >> Output.txt
    sshpass -f password ssh -o StrictHostKeyChecking=no user@$line zgrep "^A30=" /var/tmp/logs3/messages.* |  >> Output.txt
done < file1

文件1:

server1
server2
server3

1 个答案:

答案 0 :(得分:4)

sshpass正在从与while循环相同的文件描述符中进行读取,并在read能够读取之前耗尽该输入。最好的办法是显式关闭其标准输入sshpass <&- ...或从/ dev / null sshpass < /dev/null重定向。

另一种选择是让sshpass从脚本继承stdin并从其他文件描述符读取:

while read line <&3; do 
   ...
done 3< file1