一,事件描述:
1,#!/bin/bash
cat ../ip.txt | while read LINE
do
echo $LINE
ssh $LINE "ls"
done
结果循环一次后退出。原因是while中使用重定向机制,文件中的信息全部读入并重定向给了整个while语句,ssh语句正好读取输入中的所有东西,导致调用玩ssh语句后,输入缓存中已经都被读完了,当read语句再读的时候读不到一纪录,循环退出。
2,#!/bin/bash
cat ../ip.txt | while read LINE
do
echo ------------$LINE
ls
done
正常循环完退出
#!/bin/bash
cat ../ip.txt | while read LINE
do
echo ------------$LINE
cat
done
只循环一次退出,cat会打印出文件中的其他纪录
二,解决办法:
1,用for语句替换
#!/bin/bash
for LINE in `cat ../ip.txt`
do
echo $LINE
ssh $LINE "ls"
done
2,输入重定向
#!/bin/bash
cat ../ip.txt | while read LINE
do
echo $LINE
ssh $LINE "ls" < /dev/null
done
时间: 2024-12-16 03:23:36