我有几台机器来更新一些脚本.我可以用一个小的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
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?如果是这样,如何在不中断循环的情况下通过ssh远程运行脚本?
用这个:
ssh -n root@${i} /usr/sbin/the_script # works for a first IP, then breaks
Run Code Online (Sandbox Code Playgroud)
该-n选项告诉ssh不要从标准输入读取.否则,它会读取stdin并将其传递给网络连接,这将消耗输入管道的其余部分.