为什么在脚本中使用OR-TRUE运算符和set -e?

时间:2017-05-01 13:49:39

标签: shell

我正在查看我在github上找到的simple shell script在Ubuntu 16.04上安装CouchDB 2.0。它有以下几点:

#!/bin/sh
...
sudo apt-get update || true
...

|| pipe组件在做什么?即正在传递给true的是什么?为什么?据我所知,当我在服务器上运行它时,我得到的结果与运行apt-get update命令时没有管道相同。

以前,如果我想更新/安装软件包,我会这样做:

sudo apt-get update
sudo apt-get upgrade

管道到true导致升级命令运行吗?另外,我可以假设shell / bash脚本中的所有内容同步发生吗?

1 个答案:

答案 0 :(得分:3)

||不是管道运营商。它是一个shell运算符,意思是“或”。如果上述命令失败,它只执行以下命令。由于true总是成功,否则什么都不做,|| true的唯一要点就是确保复合命令成功。

通常这是不必要的,但您可以使用set -e将shell置于终止失败模式。在这种情况下,任何失败的脚本命令都会导致脚本立即终止。 (有时这样做是为了避免检查每个命令的状态,但通常不建议将其作为最佳实践。)

对于set -e,有时需要忽略某些命令的失败(例如apt-get update);将||true附加到此类命令将保证成功并允许脚本继续,即使更新失败。