0

スクリプトで、プロセスの出力を 1 行ずつ読み取り、ユーザーから確認を取得したいと考えています。これまでのところ、私はこれを行ってきました:

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/stdin2番目の読み取りは、(パイプではなく)端末から直接読み取る必要があります。

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

条件にはread, が1 つしかなく、括弧で囲まれていないことに注意してください(これによりサブシェルが作成され、ループ本体ではなく、そのサブシェルでのみ使用可能になります)。whileline

于 2013-03-05T17:35:44.387 に答える