一、代码 1:
- while read LINE
- do
- echo *******************************************$LINE
- ssh 127.0.0.1 cat
- done < data.txt
实际结果:
1. echo 命令只能打印第一行
2. ssh 命令把 data.txt 文件当作输入,并打印出除第一行之外的其他的行
不符合预期的原因分析:
while 中使用重定向机制,data 文件中的信息都已经读入并重定向给了整个 while 语句。所以当我们在 while 循环中再一次调用 read 语句,就会读取到下一条记录。
但是,因为 ssh 会读取存在的缓存。调用完 ssh 语句后,输入缓存中已经都被读完了,当 read 语句再读的时候当然也就读不到纪录,循环也就退出了。
这种方式的改进方式就是如代码 2 所示,对 ssh 使用输入重定向,而防止它去读 while 的缓存。
或者使用代码 3 的方式,即避免了使用重定向的方式。
二、代码 2:
- while read LINE
- do
- echo *******************************************$LINE
- ssh 127.0.0.1 ls < /dev/null
- done < data.txt
实际结果:
1. echo 命令依次打印出所有的行
2. 每打印一行,ssh 命令执行一次
三、代码 3:
- for LINE in `cat data.txt`
- do
- echo *******************************************$LINE
- ssh 127.0.0.1 ls
- done
实际结果:
1. echo 命令依次打印出所有的行
2. 每打印一行,ssh 命令执行一次
来源: http://www.bubuko.com/infodetail-1973929.html