bashでタイマーを使用する方法は?

スクリプトの最初から始まり最後で止まるタイマーが必要でした。

コメント

  • 達成したい目標を書いてください。スクリプトの動作時間を測定するには、timeコマンド(time ./script.sh)を使用し、現在の時刻を出力するには、dateコマンドなどを使用します。
  • stackoverflow.com/questions/3840558/ …
  • 基本的なLinuxコマンドを使用します:time yourprogram.sh、@ MariusCotofanaが説明しました

回答

秒単位の期間が必要な場合は、最初に

start=$SECONDS 

最後に

コメント

回答

Linuxの組み込みのtimeコマンドを使用できます。manページから:

time COMMAND [arguments]

timeは、表示する情報を決定します文字列FORMATからのCOMMANDによって使用されるリソースについてのay。コマンドラインでフォーマットが指定されていないが、TIME環境変数が設定されている場合、その値がフォーマットとして使用されます。

スクリプト、使用:

$ time cleanup.sh 

コメント

回答

これはかなり古い質問だと思いますが、何かが実行されるのにかかった時間を知りたい/必要なときに、これが私が行う方法です。

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 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です