我有一个cron作业,其中包含以下两行:
LOCK=/var/run/dns-check
...
if [ ! -r "$LOCK" -o "$ADDR_NOW" != "$(cat $LOCK)" ] ; then
这是脚本中cat
的唯一用法。今天我收到了来自cron的邮件,出现以下错误:
cat: /var/run/dns-check: No such file or directory
我想知道这里发生了什么。
我正在使用-r
测试文件,以检查它是否可读并取消结果。这意味着,如果文件不可读,则检查成功。评估可以在这里停止,因为表达式已经是真的。 <{1}}将不会被调用。
否则会评估cat
条件,这意味着,如果文件存在,则执行-o
。
为什么cat
报告错误,无法读取文件,尽管cat
发现它是可读的?
答案 0 :(得分:5)
您使用的条件形式不进行短路评估。相反,试试这个:
[ ! -r "$LOCK" ] || [ "$ADDR_NOW" != "$(cat $LOCK)" ]
然后第二次检查只会在第一次检查失败时发生。