私に必要なのは、キーを押してスキップできる80秒の睡眠です。残り時間を確認できる点がメリットになります。
答え1
より簡単な方法は
read -t 80 -n 1 -s -p "Hit a key to continue"
しかし、残り時間は見られません。残り時間を表示するには、サブシェルを含むより複雑なスクリプトを使用できます。
( for i in {80..0}; do
echo Wait for $i seconds or press any key;
sleep 1;
done )&
read -t 80 -n 1 -s; kill $!
議論の余地がありますが、このkill
コマンドはやや安全ではありません。ただし、サブシェルがスリープモードに失敗して早期に終了し、無実のプロセスがそのPIDを再利用して終了する可能性はほとんどありません。
答え2
非常に簡単なスクリプトは次のとおりです。
#!/bin/bash
IFS=_
count=80
echo "hit a key:"
while [ $count -ge 1 ]
do
echo -e -n "\rtime remaining: $count"
read -n 1 -s -t 1 myresponse
if [ "$myresponse" ]
then
echo -e -n "\nyou entered: $myresponse\n"
break
fi
((count--))
done
if [ $count -eq 0 ]
then
echo -e -n "\nyou did not entered anything\n"
fi
編集する:IFS
フィールド区切り文字を下線に変更する行を追加しました。スクリプトは空白、タブ、Enterで動作します。テストを引用符で囲むことは本当に安全なので、これを追加しました。