SECONDS変数って、なんだ?

Posted on 2017/09/20

ToC

小ネタの投稿。 bashで書いてある定期バッチ処理の処理時間を出力しておくことで、問題に早く気づく 何かの役に立つかなぁとおもい実装してみた。


普通の実装

普通に考えられる実装だと、定期バッチが開始した時間(START_TIME)と 終了した時間(END_TIME)を取得して、その差の時間が処理時間とするというのが普通ですよね。 多分こんな感じになると思います。

#!/bin/bash 

START_TIME=`date +%s` 
### ここに 定期バッチ処理 を記載する 
END_TIME=`date +%s` 

PROCESS_TIME=$((END_TIME - START_TIME)) 

echo ${PROCESS_TIME}

manでSECONDSに出会う

bashのmanを見ていたところ、変数 ${SECONDS} というものがあるみたいです。 ざっくり訳してみると、 ${SECONDS} に値を設定しておけば、値を参照した時までにカウントアップした 秒数が取得できるよって書いてあります。

SECONDS 

  Each time this parameter is referenced, the number of seconds 
  since shell invocation is returned. If a value is assigned to SECONDS, 
  the value returned upon subsequent references is the number of seconds 
  since the assignment plus the value assigned. If SECONDS is unset, 
  it loses its special properties, even if it is subsequently reset.

あれ、これ使えば変数1つしか必要ないかも。。。知らなかった。 ちょっとだけ、スッキリしました。もしかすると、意外と知られていない変数がもっと沢山あるかも。

#!/bin/bash 

SECONDS=0 
### ここに 定期バッチ処理 を記載する 
PROCESS_TIME=${SECONDS} 

echo ${PROCESS_TIME}

[amazon_link asins=‘4873112672,4873112540,4774173444,4774124818,4873113768’ template=‘ProductCarousel’ store=‘lunalab-22’ marketplace=‘JP’ link_id=‘60baa345-9c6a-11e7-afbe-4d3461491b79’]