Bashで入力を消去する方法

Bashで入力を消去する方法

/dev/randomから大量のデータを読み取るbashスクリプトがあります。ランダムデーモンをシードするには、ユーザーがランダムに入力する必要があります。ただし、スクリプトが完了すると、入力された内容はすべてコマンド入力にダンプされます。コードは次のとおりです。

for i in ${users_thing[@]}
do
    pass[${num}] = $(dd if=/dev/random status=noexfer bs=1 count=128 | base64) & #generate password
    echo -n "Creating password: `expr $num + 1` of $sizes "     
#tell what's going of
    echo -en "\033[s"
    while [[ $(jobs) != *Exit* ]]  #while the program is still running 
    do
        for j in ${spinny_thing[@]} #now spin
        do 
           echo -en "\033[u\033[1D$j        "
        done
    done
    echo ""
    num=`expr $num + 1`
done

だから私はフォアグラウンドプロセスを中断せずにstdinをダンプできるようにしたいので、一時停止してreadから削除されます。どうやって描くことができますか/dev/null

ベストアンサー1

必要なものを理解したら、readそれを使用して目標を達成する必要があります。ただし、無期限にブロックしたくないので、readタイムアウトを設定します。

たとえば、

#!/bin/bash

sleep 5
echo done sleeping
read -N 10000000 -t 0.01

sleep実行時に希望の内容を入力できます。完了すると、bashはそれを呼び出し、readSTDINバッファ内のすべてを吸収します。
製造元は-N端末readをラインモードではなく文字モードに設定します。これは、端末エミュレータが通常時間に合わせて文字のみを送信するためですEnter。したがって、を押しずに文字を入力すると、Enterプロンプトにその文字が表示されます。数字は読み取る文字数です。スクリプトの終わりまでに、ユーザーは1000万文字を入力できないようです。
これ-tにより、0.01秒後に読み取りがタイムアウトします。それで、ユーザーが1,000万文字を0.01秒以内に完了できない場合は、あきらめてreadこれまでに入力したものを入手してください。

おすすめ記事