Shell 为什么在带有set-e的脚本中使用或TRUE运算符?
我在github上找到了一个在Ubuntu 16.04上安装CouchDB 2.0的工具。它有以下几行:Shell 为什么在带有set-e的脚本中使用或TRUE运算符?,shell,Shell,我在github上找到了一个在Ubuntu 16.04上安装CouchDB 2.0的工具。它有以下几行: #!/bin/sh ... sudo apt-get update || true ... | |管道组件在做什么?也就是说,通过管道传输到true的是什么,为什么?据我所知,当我在我的服务器上运行它时,我得到的结果与在没有管道的情况下运行apt get update命令相同 以前,如果我想更新/安装软件包,我会: sudo apt-get update sudo apt-get upgr
#!/bin/sh
...
sudo apt-get update || true
...
| |管道
组件在做什么?也就是说,通过管道传输到true
的是什么,为什么?据我所知,当我在我的服务器上运行它时,我得到的结果与在没有管道的情况下运行apt get update
命令相同
以前,如果我想更新/安装软件包,我会:
sudo apt-get update
sudo apt-get upgrade
管道连接到
true
是否会导致运行升级命令?另外,我可以假设shell/bash脚本中的所有内容都是同步发生的吗?|
不是管道操作符。它是一个shell运算符,表示“或”。如果前面的命令失败,它只执行下面的命令。由于true
总是成功,否则什么也不做,因此|true
的唯一要点是确保复合命令成功
通常这是不必要的,但是您可以使用将shell置于terminate on failure模式。在这种情况下,任何失败的脚本命令都会导致脚本立即终止。(有时这样做是为了避免检查每个命令的状态,但通常不建议将其作为最佳做法。)
使用
set-e
,有时需要忽略某些命令的失败(例如apt get update
);将| | true
附加到这样的命令将保证成功,并允许脚本继续运行,即使更新失败。|
不是管道操作符。它是一个shell运算符,表示“或”。如果前面的命令失败,它只执行下面的命令。由于true
总是成功,否则什么也不做,因此|true
的唯一要点是确保复合命令成功
通常这是不必要的,但是您可以使用将shell置于terminate on failure模式。在这种情况下,任何失败的脚本命令都会导致脚本立即终止。(有时这样做是为了避免检查每个命令的状态,但通常不建议将其作为最佳做法。)
使用
set-e
,有时需要忽略某些命令的失败(例如apt get update
);将| | true
添加到这样的命令将保证成功,并允许脚本继续运行,即使更新失败。它不是管道,而是逻辑的,或者:如果第一个命令没有退出状态0(成功),则执行第二个命令。这确保此行的退出状态始终为0。是否设置了-e
外壳选项?这类事情经常发生在它发生的时候。(编辑:刚刚选中,set-e
已设置。)更改了标题,因为我被严重关闭。它不是管道,而是逻辑或:如果第一个命令没有退出状态0(成功),请执行第二个命令。这确保此行的退出状态始终为0。是否设置了-e
外壳选项?这类事情经常发生在它发生的时候。(编辑:刚刚选中,set-e
已设置)更改了标题,因为我非常不喜欢。谢谢。我应该把它看作是一种或,而不是一种感谢。我应该把它看作是一个或,而不是一个管道