0

在脚本中,我想逐行读取流程输出,并得到用户的确认。到目前为止,我已经这样做了:

mycommand-outputpiped | while (read line)
do
   read line
   #dostuff

   read confirm #oops -> this read the next item from the pipe, not the keyboard
done

所以我尝试添加:

read confirm < /dev/stdin

但它并没有改变事情,它仍然从管道中读取下一行......我应该如何处理这个?

4

1 回答 1

8

这两个read命令都从从while循环继承的标准输入流中读取。以下应该有效;您的第二次读取需要直接从终端读取,而不是/dev/stdin(这是管道)。

mycommand-outputpiped | while read line
do
    # do stuff
    read confirm < /dev/tty
done

请注意,条件中只有一个read,while并且它没有括在括号中(这将创建一个子外壳,并且line只能在该子外壳中使用,而不是循环体)。

于 2013-03-05T17:35:44.387 回答