Ubuntuでは、スクリプトに最小x秒かかることを確認する簡単なコードがあります(ここでは500)。
t1=$(date +%s)
# script is here
t2=$(date +%s)
let "t = 500 - $t2 + $t1"
(( t = t>0 ? t : 1 ))
sleep $t
コードは完全に動作しますが、私のコーディングは効率的ではないと思います。これらの3行は
t2=$(date +%s)
let "t = 500 - $t2 + $t1"
(( t = t>0 ? t : 1 ))
1行で表現する必要があります。私の質問はコードを改善する方法です。
ベストアンサー1
あなたのスクリプトは移植が不可能で(およびをlet
使用しているので(( .. ))
)混乱しています(両方 let
と(( .. ))
)、文書が不足し(コメントなし、変数名は説明的ではない)、やや安全ではありません(引用符付きの拡張子がないため$t
)。
書き直したいなら、これは私のものです。
#!/bin/sh
min_duration=500
t_start=$(date +%s)
# script is here
t_end=$(date +%s)
elapsed=$(( t_end - t_start ))
# sleep long enough to make sure 'min_duration' seconds has elapsed,
# but at least 1 second
sleep "$(( elapsed < min_duration ? min_duration - elapsed : 1 ))"