2

実行中のプログラムの開始時刻と終了時刻を追跡するシェル スクリプトを作成しています。最後に、読み取り可能な開始時間と終了時間と時間コストの両方を秒単位で出力するスクリプトが必要です。

コストを計算するには、次のように書きます

START=$(date +%s)
# ................
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "Start Time: $START"  >> $LOGFILE 2>&1
echo "End Time: $END" >> $LOGFILE 2>&1
echo "Running time: $DIFF seconds"  >> $LOGFILE 2>&1

これは計算には機能しますが、$START と $END は秒数としてのみ出力できます。

以下のように定義すると、読み取り可能な日付形式を印刷できます

START=$(date +%c)
END=$(date +%c)

ただし、 DIFF=$(( $END - $START )) は機能しなくなりました。

したがって、定義された形式で日付を出力し、それらを使用して計算を実行できるように、シェルスクリプトに解決策があるかどうか疑問に思っています。

ところで、私は AIX を使用しています。

4

2 に答える 2

2

GNU日付がある場合は、エポック時間を使用できます

date -d @$START +%c

そうでなければ、する

read start start_display < <(date +"%s %c")
# ...
read end end_display < <(date +"%s %c")
diff=$(( $end - $start ))
echo "Start time: $start_display"

プロセス置換が可能なシェルを使用していない場合は、

set -- $(date +"%s %c")
start=$1; shift
start_display=$*

bash を使用する場合は、組み込みの $SECONDS 変数を利用してください。この変数は、新しい bash プロセスではゼロから始まり、1 秒ごとに増加します。

start_display=$(date)
# ...
echo "Start Time: $start_display"
echo "End Time: $(date)"
echo "Running time: $SECONDS seconds"
于 2013-08-21T09:19:38.330 に答える
0

date -d @Secondsを使用して、秒を日付に変換できます。例えば:

 $ date +%s
     1377095983
 $ date -d @1377095983
     Wed Aug 21 20:09:43 IST 2013
于 2013-08-21T14:43:38.360 に答える