日付、算術演算、および三項演算子を1行に表示

日付、算術演算、および三項演算子を1行に表示

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 ))"

おすすめ記事