0から99まで計算する次のループがあります。
#!/bin/bash
for ((i=0;i<100;i++));
do
echo $i
sleep 1
done
ループスクリプトの実行中に端末出力の結果を変更する方法はありますか?文字kを押すと、ループが自動的に現在の数字に10個の数字を追加するため、画面に10と表示され、Kを押すとループが自動的に20に変わります。ありがとう
ベストアンサー1
コメントで述べたように、次のものを使用できます。
read -t 1 -n 1 key
-t
オプションを削除できるため、スクリプトsleep
は次のようになります。
#!/bin/bash
for ((i=0; i<100; i++)); do
read -t 1 -n 1 key
if [ "$key" = "k" ]; then
i=$((i + 10))
fi
echo $i
done
しかし、私の考えにもう少し移植性が良いのは次のとおりです。
#!/bin/bash
if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
keystroke=''
i=0
while [ $i -lt 100 ]; do
keystroke="$(dd bs=1 count=1 2>/dev/null)" # http://www.tldp.org/LDP/abs/html/
if [ "$keystroke" = "k" ]; then
i=$(( i + 10 ))
elif [ "$keystroke" = "q" ]; then
break
fi
i=$(( i + 1 ))
echo $i
sleep 1
done
if [ -t 0 ]; then stty sane; fi
exit 0