ユーザーがQIを押して終了しようとしたときにストップウォッチを作成しようとしています。
2つのスクリプトが見つかりましたが、そのうちの1つはctrl + zを押す前に時計を表示します。 「q」を押すと終了するスクリプトもあります。
私はそれらを結合しようとしましたが、「読む」がすべてを混乱させるようです。
これを実装する理由は、ユーザーがQを押すと経過時間がファイルに保存されるためです。
ストップウォッチ:
BEGIN=$(date +%s)
echo Starting Stopwatch...
while true; do
NOW=$(date +%s)
let DIFF=$(($NOW - $BEGIN))
let MINS=$(($DIFF / 60))
let SECS=$(($DIFF % 60))
let HOURS=$(($DIFF / 3600))
let DAYS=$(($DIFF / 86400))
# \r is a "carriage return" - returns cursor to start of line
printf "\r%3d Days, %02d:%02d:%02d" $DAYS $HOURS $MINS $SECS
sleep 0.25
done
qで終了:
while true; do
echo -en "Press Q to exit \t\t: "
read input
if [[ $input = "q" ]] || [[ $input = "Q" ]]
then break
else
echo "Invalid Input."
fi
done
PS:私は非常にこれに慣れていません。
ベストアンサー1
おそらくこれはあなたに役立ちます。私はそれらを1つに統合しましたが、いくつかの修正を加えました。これが結果です。
BEGIN=$(date +%s)
echo Starting Stopwatch...
echo Press Q to exit.
while true; do
NOW=$(date +%s)
let DIFF=$(($NOW - $BEGIN))
let MINS=$(($DIFF / 60))
let SECS=$(($DIFF % 60))
let HOURS=$(($DIFF / 3600))
let DAYS=$(($DIFF / 86400))
# \r is a "carriage return" - returns cursor to start of line
printf "\r%3d Days, %02d:%02d:%02d" $DAYS $HOURS $MINS $SECS
# 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
ご覧のとおり、sleep
最初のスクリプトのコマンドを2番目のスクリプトに置き換えました。タイムアウトにはread
遅延機能があります。-N
最初のキーを押してからread
待たずに反応するには、このオプションが必要です。Enter