映画のエンドロール観る派?観ない派?

またまたシェル関係で質問です。
sh上で入力受付をさせたいときは通常
「read 変数名」
をいれて入力受付をさせています。
ですが、今やっている現象でこの入力受付が
スルーされているという現象が起きていて悩んでいます。

※ ソース例
ls -l | while read VAL_A ; do
echo "test"
read VAL_B ← ここで入力受付がスルーされる
done

 そこで質問なのですが、read以外にキー入力受付を
実現できるコマンドというものは存在するのでしょうか?
もしなければ、回避方法は存在するのでしょうか?

ちなみに実行環境は
OS:HP-UX11.0
となっています。それでは宜しくお願いします。

A 回答 (1件)

入力がスルーされているわけではないです。

パイプラインの後の while ~ のコマンド全体の
標準入力を read しているわけです。以下のように書いてみれば、どういうふうに動いているか
分かりますよね?

ls -l | while read VAL_A ; do
read VAL_B
echo "A: $VAL_A"
echo "B: $VAL_B"
done

で、解決法なんですが、以下のようにしてみては?

ls -l | while read VAL_A ; do
echo "test"
read VAL_B <&1   ※ ここに注目!
done

# HP-UX では試してません
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お答えいただいた対処法で試した所
うまくいきました!
標準出力を標準入力にリダイレクトして
lsのデータを取らせないようにするという方法ですね。
それなら、
readプロセスのストリーム
・コマンドのデータ=STDIN
・入力受付用=STDOUT
という風に分けられますね。

回答ありがとうございました。

お礼日時:2003/03/05 13:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報