Bash:同时,阅读和更多在一起

时间:2015-08-26 18:56:26

标签: bash

在bash脚本中使用while,read和more命令的组合时,我收到了一些不应该打印的输出。

最小的例子包含一个shell脚本' problem.sh'和两个测试文件' test.dat'和' test2.dat':

problem.sh:

while read row; do
  #echo $row
  more test2.dat
  echo HERE
done < test.dat

TEST.DAT:

test1
test2
test3

test2.dat

lefttop
abc
leftbot

该程序应该在终端中打印三行 test2.dat 的三倍(使用 echo HERE 检查while循环次数),但它给出了在程序执行开始时也 test2 test3 echo $ row 如上所述被注释掉,否则它还会在开头打印 test1 并且只在循环中运行一次。有什么帮助吗?

2 个答案:

答案 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)的读取。