为什么模式“command || true”有用?

为什么模式“command || true”有用?

我目前正在探索 Debian 软件包,并且一直在阅读一些代码示例。例如,postinst脚本中的每一行都是一个模式。

some command || true
another command || true

因此,如果某些命令失败,则该行返回 true,但我不知道这如何影响程序的输出。

答案1

这种模式的原因是 Debian 软件包中的维护者脚本往往以 开头set -e,这会导致 shell 在任何命令(严格来说,管道、列表或复合命令)以非零状态退出时立即退出。这可以确保错误不会累积:一旦出现问题,脚本就会中止。

如果允许脚本中的命令失败,添加|| true可确保生成的复合命令始终以状态零退出,因此脚本不会中止。例如,删除目录不应该是致命错误(防止包被删除);所以我们会用

rmdir ... || true

因为rmdir没有选项告诉它忽略错误。

答案2

虽然它不会影响刚刚运行的程序的输出 - 它允许调用者继续进行,就好像一切正​​常一样,又会影响未来的逻辑。

改写:它掩盖了错误地位上一个命令的。

michael@x071:[/usr/sbin]cat /tmp/false.sh
#!/bin/sh
false

michael@x071:[/usr/sbin]cat /tmp/true.sh 
#!/bin/sh
false || true

michael@x071:[/usr/sbin]sh /tmp/false.sh; echo $?
1
michael@x071:[/usr/sbin]sh /tmp/true.sh; echo $? 
0

相关内容