在bash脚本中使用while,read和more命令的组合时,我收到了一些不应该打印的输出。
最小的例子包含一个shell脚本' problem.sh'和两个测试文件' test.dat'和' test2.dat':
while read row; do
#echo $row
more test2.dat
echo HERE
done < test.dat
test1
test2
test3
lefttop
abc
leftbot
该程序应该在终端中打印三行 test2.dat 的三倍(使用 echo HERE 检查while循环次数),但它给出了在程序执行开始时也 test2 和 test3 echo $ row 如上所述被注释掉,否则它还会在开头打印 test1 并且只在循环中运行一次。有什么帮助吗?
答案 0 :(得分:3)
将test.dat
从stdin移到FD 3,让more
不间断地使用stdin:
while read -r row <&3; do
#echo $row
more test2.dat
echo HERE
done 3< test.dat
当然,假设您希望 more
能够与用户进行交互。如果您只想将文件连接在一起,请改用cat
。
答案 1 :(得分:1)
将more test2.dat
替换为more test2.dat < /dev/null
以停止更多来自stdin(test.dat)的读取。