すみません。「すると便利」は言い過ぎました。すみません。
便利なときがあります。
以下のような場合です。
while read LINE 0<&9
do
echo $LINE
confirm '続行します。いいですか?'
done 9< $0
なんでかつーと、while の内部の標準入力はすべてファイルに置換されてしまうからです。
ファイルから読み取りながら何か処理をして、必要に応じて y/n を入力させるようなことを考えるときに困ったりします。しました。
失敗したパターン(標準入力をリダイレクト)
以下のようにしたら、confirm の中の read もファイルから読み込んで失敗しました。
function confirm()
{
echo "${0} (y or n)"
read IN
if [ "${IN}" = "n" ];
then
exit 1
fi
}
while read LINE
do
echo $LINE
confirm '続行します。いいですか?'
done < $0
うまくいかなかった対策
泥縄的に、read コマンドの入力を明示的に /dev/tty
に変えました。強制でコンソールから入力させる感じですね。
function confirm()
{
echo "${0} (y or n)"
read IN < /dev/tty
if [ "${IN}" = "n" ];
then
exit 1
fi
}
基本的にはこれでうまく動くのですが、こうしちゃうと yes
コマンドなどが利用できなくなるので不便だと思いました。