BLOGTIMES
2015/02/06

SECONDS 変数を使った bash お手軽タイムアウト実装

  sh 
このエントリーをはてなブックマークに追加

先日、シェルスクリプトのタイムアウト実装をしたときに使った SECONDS についてのメモ。

タイムアウトの実装方法はいろいろあると思うのですが、今回使った SECONDS は bash に標準で用意されている変数*1で、起動時からの経過秒数が格納されています。これをスタート時点で別の変数に記録しておいて、ループ内で判定してやれば簡単にタイムアウトが実装できます。

Man page of BASH

SECONDS
このパラメータを参照すると、シェルが起動されてからの秒数が返されます。 SECONDS に値を代入した場合、それ以降の参照において返される値は、 代入された値と代入以降の秒数を足した値になります。 SECONDS を unset すると、この変数の特殊な性質はなくなります。後で再び set しても元には戻りません。

サンプルとしてはこんな感じになるでしょうか。

MAX_SLEEP_SECS=3 SLEEP_INTERVAL=1 TTL=$(( $SECONDS + $MAX_SLEEP_SECS )) while true ; do if [ -d ./test ] ; then echo "./test found." break; fi echo "sleep..." sleep $SLEEP_INTERVAL if [ "$TTL" -le "$SECONDS" ]; then echo "Timed out" break; fi done

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/7377
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン