2

我有几台机器可以更新一些脚本。我可以用我身边的一个小 bash 脚本来做到这一点,它由一个 while 循环组成,用于从列表中读取 IP 并为它们调用 scp。它工作正常,但是当我尝试在循环中运行更新的脚本时,它会中断循环,尽管它本身运行得很好。

#!/bin/bash

cat ip_list.txt | while read i; do
    echo ${i}
    scp the_script root@${i}:/usr/sbin/ # works ok
    ssh root@${i} /usr/sbin/the_script  # works for a first IP, then breaks
done

这是它应该如何工作的吗?如果是这样,如何在不中断循环的情况下通过 ssh 远程运行脚本?

4

2 回答 2

7

用这个:

ssh -n root@${i} /usr/sbin/the_script  # works for a first IP, then breaks

-n选项告诉ssh不要从标准输入读取。否则,它会读取标准输入并将其传递给网络连接,这会消耗输入管道的其余部分。

于 2013-05-16T10:35:11.873 回答
1

您需要像这样更改 ssh 行

ssh root@${i} /usr/sbin/the_script  < /dev/null # works for a first IP, then breaks
于 2013-05-16T10:36:11.810 回答