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