Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 为什么在带有set-e的脚本中使用或TRUE运算符?_Shell - Fatal编程技术网

Shell 为什么在带有set-e的脚本中使用或TRUE运算符?

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

我在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 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
已设置)更改了标题,因为我非常不喜欢。谢谢。我应该把它看作是一种
,而不是一种感谢。我应该把它看作是一个
,而不是一个管道