我目前正在探索 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