【问题标题】:How to read line by line and also get input from keyboard?如何逐行阅读并从键盘获取输入?
【发布时间】:2011-02-10 05:26:52
【问题描述】:

我有类似的 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。

【问题讨论】:

  • 谢谢大家..你的答案工作正常..现在我很困惑选择(打勾)哪个答案:D ..
  • while 后面不需要分号。

标签: linux shell awk


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    -u 99&lt;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$ _
    

    【讨论】:

      【解决方案3】:

      如果你真的是说键盘

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

      无论任何重定向,都会从附加的终端读取。

      【讨论】:

        猜你喜欢
        • 2012-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-07
        • 2018-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多