まだ運動を練習しています。前の質問にご協力いただきありがとうございます。
私たちの使命は、ターミナルウィンドウに「スクリーンセーバー」を作成することです。
私がやりたいことは、キーを押すのを待っている間にランダムに数字を生成し、ファイルに追加するいくつかのASCIIアートピクチャの1つを選択することです。
これまで私が思いついた方法は効果がありますが、キーを押した後は他の数字が再生成されるだけです。キーを押すまで引き続き数字を生成したいと思います。これにより、ループから抜け出すことができます。
while read -r -n1 key
do
num=$(awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-
min+1))}')
echo $num
case $num in
1)
echo "hello"
sleep 5
;;
2)
echo "bye"
sleep 5
;;
***and so on***
esac
done
私は簡単なものを見落としていると確信しています。今日7時間のうち最も多くの時間をこの椅子で過ごしました。
非常にありがとう
編集:これを見つけましたキーを押すまで何かを出力します(ループ)。
それに応じて調整しましたが、最後の睡眠5が実行を完了するまでカーソルは表示されません。
#!/bin/bash
while true; do
num=$(awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')
case $num in
1)
echo "hello"
sleep 5
;;
*)
echo "whats going on 'ere?"
sleep 5 &
wait $!
;;
esac
# In the following line -t for timeout, -N for just 1 character
read -t 0.25 -N 1 input
if [[ $input = "q" ]] || [[ $input = "Q" ]]; then
# The following line is for the prompt to appear on a new line.
echo
break
fi
done
答え1
効果がありました。これを終えた
#!/bin/bash
tput civis
while true; do
num=$(awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')
case $num in
1)
clear
cat ./s0.file
sleep 3
;;
....
*)
clear
cat ./s9.file
sleep 3
;;
esac
# In the following line -t for timeout, -N for just 1 character
read -t 0.25 -N 1 input
if [[ $input = " " ]] || [[ $input = " " ]]; then
# The following line is for the prompt to appear on a new line.
echo
break
fi
done
tput cnorm