
次のような bash コマンドのリストを含むファイルがあります。
echo 'foobar'
echo 'helloworld'
echo 'ok'
そして、これらのコマンドを次のようにパイプするだけで実行できます/bin/bash
。
cat commands | /bin/bash
さて、実行を途中で一時停止し、ユーザー入力を待つにはどうすればよいでしょうか? を使用するとread
うまくいかないようです。
echo 'foobar'
echo 'helloworld'
read -p 'Press ENTER to continue'
echo 'ok'
答え1
次のように実行します。
/bin/bash commands
ファイルbash
を にパイプすると、ファイルは の stdin を経由して移動しますbash
。このような場合read
、 stdin からの読み取りは、ターミナルからではなく、パイプされたストリームから読み取ります。 を消費しますecho 'ok'
。 への引数としてファイルを指定すると、bash
引き続き実行されますが、今回は stdin はリダイレクトされません。
次のように実行したいと仮定します。比較bash script.sh
実行との違いは何ですか./script.sh
?