スクリプトの最初から始まり最後で止まるタイマーが必要でした。
コメント
回答
回答
Linuxの組み込みのtime
コマンドを使用できます。manページから:
time COMMAND [arguments]
timeは、表示する情報を決定します文字列FORMATからのCOMMANDによって使用されるリソースについてのay。コマンドラインでフォーマットが指定されていないが、TIME環境変数が設定されている場合、その値がフォーマットとして使用されます。
スクリプト、使用:
$ time cleanup.sh
コメント
- 知っている使用している
time
。 hackernoon.com/ …
回答
これはかなり古い質問だと思いますが、何かが実行されるのにかかった時間を知りたい/必要なときに、これが私が行う方法です。
Bashには、SECONDS
という名前の内部変数の形式の秒タイマーが組み込まれています(ここを参照してください。他の内部変数の場合)
SECONDS=0
を、実行時間をチェックする前に置きます。適切な結果を得るには、ユーザー入力の後に行う必要があります。 「情報の入力を求める場合は、プロンプトの後に配置します。
次に、確認する内容の最後にこれを配置します。
if (( $SECONDS > 3600 )) ; then let "hours=SECONDS/3600" let "minutes=(SECONDS%3600)/60" let "seconds=(SECONDS%3600)%60" echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)" elif (( $SECONDS > 60 )) ; then let "minutes=(SECONDS%3600)/60" let "seconds=(SECONDS%3600)%60" echo "Completed in $minutes minute(s) and $seconds second(s)" else echo "Completed in $SECONDS seconds" fi
秒単位の時間のみを知りたい場合は、上記を次のように簡略化できます。
echo "Completed in $SECONDS seconds"
例:
read -rp "What"s your name? " "name" SECONDS=0 echo "Hello, $name" if (( $SECONDS > 3600 )) ; then let "hours=SECONDS/3600" let "minutes=(SECONDS%3600)/60" let "seconds=(SECONDS%3600)%60" echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)" elif (( $SECONDS > 60 )) ; then let "minutes=(SECONDS%3600)/60" let "seconds=(SECONDS%3600)%60" echo "Completed in $minutes minute(s) and $seconds second(s)" else echo "Completed in $SECONDS seconds" fi
コメント
- しない人のためのショートカットこのような手の込んだ時間形式は必要ありません:
date +%T -d "1/1 + $SECONDS sec"
(24時間未満に制限されていますが、日数を追加することもできます) - TLDP 'の内部変数への優れたリンク。ありがとうございます!
回答
#!/bin/bash start=$(date +%s) # # do something sleep 10 # # end=$(date +%s) seconds=$(echo "$end - $start" | bc) echo $seconds" sec" echo "Formatted:" awk -v t=$seconds "BEGIN{t=int(t*1000); printf "%d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}"
コメント
- こんにちは、UnixSEへようこそ。コードのみの回答は'あまりよく見えません。スクリプトが何をしているのか説明できるかもしれません。
- ここで1000を掛けてから、で割るのはなぜですか。表示されたすべての値に対して後で1000 *修飾子?
回答
@anaskは、これに対して賢い解決策を実行します答えは、新しいものを作成する代わりに、ネイティブの$SECONDS
を使用することをお勧めします
awk -v t=$SECONDS "BEGIN{t=int(t*1000); printf "Elapsed Time (HH:MM:SS): %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}"
目的printf
除算では、経過秒数を対応する単位の時間、分、秒にそれぞれ変換します。
回答
最近、同様のことを試みています。提案します:
date1=$(date +%s) #Use this arithmetic to determine elapsed time since defining date1 $(( $(date +%s) - $date1 )) #While loop using timer while ! [ $(( $(date +%s) - $date1 )) -gt 10 ]; do #Terminal timer -n won"t append new line, so the echo will replace itself. ##There is also some date formatting to achieve: HH:MM:SS. echo -ne "$(date -u --date @$(( $(date +%s) - $date1 )) +%H:%M:%S)\r" done
time
コマンド(time ./script.sh)を使用し、現在の時刻を出力するには、date
コマンドなどを使用します。time yourprogram.sh
、@ MariusCotofanaが説明しました