我正在查看我在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脚本中的所有内容同步发生吗?
答案 0 :(得分:3)
||
不是管道运营商。它是一个shell运算符,意思是“或”。如果上述命令失败,它只执行以下命令。由于true
总是成功,否则什么都不做,|| true
的唯一要点就是确保复合命令成功。
通常这是不必要的,但您可以使用set -e
将shell置于终止失败模式。在这种情况下,任何失败的脚本命令都会导致脚本立即终止。 (有时这样做是为了避免检查每个命令的状态,但通常不建议将其作为最佳实践。)
对于set -e
,有时需要忽略某些命令的失败(例如apt-get update
);将||true
附加到此类命令将保证成功并允许脚本继续,即使更新失败。