Bashでstdinを消去する簡単な方法はありますか?
頻繁に実行されるスクリプトがありますが、スクリプトのある時点で読むユーザー入力を取得するために使用されます。問題は、ほとんどのユーザーがWebベースの文書からコマンドラインをコピーして貼り付ける方法でこのスクリプトを実行することです。これには、末尾の空白が含まれているか、さらに悪い場合は、サンプルコマンドの後にいくつかのテキストが含まれることがよくあります。プロンプトを表示する前に、過度のジャンクを簡単に削除するようにスクリプトを調整したいと思います。
答え1
これBashの非ブロックI/Oスレッド役に立つかもしれません。
stty
とを使用することをお勧めしますdd
。
bash
read
または、オプションとともに組み込み機能を使用することもできます-t 0
。
# do your stuff
# discard rest of input before exiting
while read -t 0 notused; do
read input
echo "ignoring $input"
done
ユーザーが端末にいるときにのみこれを行うには、次のようにします。
# if we are at a terminal, discard rest of input before exiting
if test -t 0; then
while read -t 0 notused; do
read input
echo "ignoring $input"
done
fi
答え2
以下は、私が選んだものに似た1行です。
while read -t 1 discard; do echo "ignoring input..."; done # Flush input