while循环在shell脚本中不起作用

时间:2014-05-21 14:53:10

标签: shell while-loop

2014年5月21日星期三上午10:09 我在两个程序下运行

第一个程序:

while read line

do 

if (cat /etc/passwd | grep -w ^"userid")
then
echo $line
fi
done < serverlist

输出:

userid:kjhfkjshd:hjgf:hsgdf:hsgbdf
server1
userid:kjhfkjshd:hjgf:hsgdf:hsgbdf
server2

第二个程序:

while read line
do
if ( sudo /bin/ssh $line /bin/cat /etc/passwd | grep -w ^"userid" )
then
echo $line
fi
done < serverlist

输出

userid:kjhfkjshd:hjgf:hsgdf:hsgbdf
server1

它不会检查第二台服务器。我无法找到第二个程序的错误。第一个程序没问题。请有人帮帮我吗?

1 个答案:

答案 0 :(得分:2)

这是一个常见的问题&#34;在循环中使用ssh时。根本原因是,当第一次生成ssh时,它会消耗你输入的其余部分,因此在循环的第二次迭代中,它会发现没有任何事情要做并终止。

解决此问题的方法是将/dev/null作为输入提供给ssh,方法是ssh -n ...或更明确的ssh ... < /dev/null