読み取る前にBashフラッシュ標準入力

読み取る前にBashフラッシュ標準入力

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

関連情報