我经常看到与......基本相同的问题。
<小时/> 当我在循环体中调用
while
时,我的ssh
循环只会迭代一次。
while read -r line; do
ssh somehost "command $line"
done < argument_list.txt
答案 0 :(得分:5)
ssh
也会从标准输入中读取内容,因此在ssh
的下一次调用之前,对argument_list.txt
的第一次调用会消耗剩余的read
。要解决此问题,请使用
ssh
的{{1}}标准输入
/dev/null
或
ssh somehost "command $line" < /dev/stdin
如果ssh -n somehost "command $line"
确实 需要从标准输入读取,您不希望它从ssh
读取更多数据。在这种情况下,您需要为while循环使用不同的文件描述符。
argument_list.txt
while read -r line <&3; do
ssh somehost "command $line"
done 3< argument_list.txt
和其他一些shell也允许bash
使用read
选项来指定文件描述符,有些人可能会发现它们更具可读性。
-u