如何逐行阅读并从键盘输入?

时间:2011-02-10 05:26:53

标签: linux shell awk

我有像 -

这样的shell脚本
while read -r line;
do 
echo $line
done  < file.txt

这工作正常,但我需要在从文件读取每行后提示用户输入。 我尝试添加“阅读”,但这不起作用。

while read -r line;
do 
echo $line
#prompt user here
read input_user
done  < file.txt

有什么想法?我也愿意使用awk。

3 个答案:

答案 0 :(得分:3)

为循环的read使用不同的FD。

while read -u 4 -r line
do 
  echo $line
  #prompt user here
  read input_user
done 4< file.txt

答案 1 :(得分:3)

您可以使用指定文件句柄的-u read选项:

while read -u 9 -r line; do 
    echo $line
    read -p 'Press ENTER ' input_user
done  9<file.txt

-u 99<file.txt相结合意味着while循环和“常规”read语句中的读取仍然来自标准输入。

您通常可以选择尚未使用的任何文件句柄 - 012分别是标准输入,输出和错误。我倾向于从9开始,根据需要向下工作,具体取决于我需要一次访问多少个文件句柄。

示例脚本:

pax$ ./qq.sh
line 1
Press ENTER <ENTER pressed>
line 2
Press ENTER <ENTER pressed>
line 3
Press ENTER <ENTER pressed>
line 4
Press ENTER <ENTER pressed>
pax$ _

答案 2 :(得分:1)

如果您的意思是键盘

while read -r line; do 
    echo $line
    #prompt user here
    read input_user </dev/tty
done <file.txt
无论是否有任何重定向,

都将从连接的终端读取。