"OR"运算符的 Bash 脚本使用



我的apache的默认logrotate脚本是:

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

我了解第6行上的输出和错误重定向,但是有人可以解释|| true的目的吗?省略该位的潜在后果是什么?

logrotate实用程序运行postrotate(或prerotate)脚本时,它会检查脚本返回的错误代码。特别是,当指定sharedscripts时,错误处理如下(引用 man logrotate,添加了强调):

共享词

通常,对于旋转的每个日志运行的前脚本和potrotate脚本,并将日志文件的绝对路径传递给第一个参数到脚本。这意味着对于匹配多个文件的日志文件条目可以多次运行一个脚本(例如/var/log/news/*示例)。如果指定了共享记录,则脚本只能运行一次,无论有多少日志与通配符的模式匹配,并且将整个模式传递给它们。但是,如果模式中的所有日志都不需要旋转,则根本不会运行脚本。如果脚本带有错误退出,则不会为任何日志执行其余操作。此选项覆盖了nosharedScripts选项,并意味着创建选项。

|| true防止http reload命令返回错误条件,该命令避免上述。

man bash(在"列表"部分中)描述了 ||

command1 || command2

command2在且仅当command1返回非零退出状态时执行。返回状态和或列表是列表中执行的最后一个命令的退出状态。

man true详细说明了 true,但我认为标题足够:"什么都不做,成功"。

简而言之,command1 || true首先执行command1。如果成功的话,结果就是成功。否则,它执行true,无能为力,因此成功。因此,它始终执行command1并始终成功

相关内容

  • 没有找到相关文章

最新更新