bash :仅当 apt 缓存超过 10 分钟时才更新 apt-get

Dre*_*mor 3 bash scripts

我正在尝试使用脚本来测试 apt 缓存是否超过 10 分钟

if [ "($(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)) -ge 600000" ]; then
echo true
fi
Run Code Online (Sandbox Code Playgroud)

但即使缓存是 1 分钟,这也会返回 true。我究竟做错了什么?

Reg*_*ser 5

您所做的不是减法,而是在两个值之间放置一个“-”符号。您可以通过尝试看到这一点。

echo "($(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp))"
Run Code Online (Sandbox Code Playgroud)

这在我的情况下给出

(1403616665 - 1403583368)
Run Code Online (Sandbox Code Playgroud)

正确的说法应该是

echo "$[$(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)]"
Run Code Online (Sandbox Code Playgroud)

这正确地给出

33297
Run Code Online (Sandbox Code Playgroud)

同样由于最外面的引号,该语句"($(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)) -ge 600000"被视为第一个值,与 进行比较nothing,这就是为什么它总是给出真实的结果。

四舍五入,脚本将是

if [ "$[$(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)]" -ge 600000 ]; then
echo true
fi
Run Code Online (Sandbox Code Playgroud)