这个bash语句中的想法是什么(命令|| true)?

时间:2017-11-09 07:31:37

标签: bash

我在互联网上看到了以下bash语句:

PYTHON_BIN_PATH=$(which python || which python3 || true)

我了解如果which python失败,则会which python3执行,但我不会在条件结束时理解true的目的。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

尝试运行:(注意 bla

which python_bla || which python3_bla_bla || true
echo $?
0

您将获得RC=0。这意味着它是一个成功进入下一个命令的构造。我们知道python_blapython3_bla_bla不存在,但仍然命令rc=0 示例:检查以下三个命令的RC,我已将date命令的拼写更改为错误,但true导致RC保持0

date;echo $?
Thu Nov  9 01:40:44 CST 2017
0
datea;echo $?
If 'datea' is not a typo you can use command-not-found to lookup the package that contains it, like this:
    cnf datea
127
datea||true;echo $?
If 'datea' is not a typo you can use command-not-found to lookup the package that contains it, like this:
    cnf datea
0

注意:您也可以使用:运算符代替true来获得相同的结果。例如:

command || :

答案 1 :(得分:1)

我想更加严谨。

例如:

如果aaa不是现有的全局二进制文件。 执行which aaa后,您可以执行echo $?,结果为1

但如果您执行which aaa | true,结果将为0

答案 2 :(得分:0)

简单。它会检查你的系统是否具有开箱即用的python(python的版本与你的O.S一起提供)或者它有python版本3。它也会确认python的可执行路径,你可以通过PYTHON_BIN_PATH打印名为echo "$PYTHON_BIN_PATH"的变量,并且也可以检查一次。

编辑: 这是一个简单的例子。假设我们有一个名为val的变量,其值为NULL,我们这样做:

echo $val || true

输出将为NULL,因为它的上一个命令没有给出任何输出。 假设我们有val=4,那么我们按如下方式运行它。

val="4"
echo $val || true
4

答案 3 :(得分:-1)

如果两个PYTHON_BIN_PATH都失败,我们的想法是将which设置为空。

可见

之间没有区别
PYTHON_BIN_PATH=$(which python || which python3 || true)

PYTHON_BIN_PATH=$(which python || which python3)

但单独运行命令会使事情变得更加明显。假设python不存在于系统中。

$(which python || which python3)
echo $? #Returning the exit status of the previous command
1 # A non zero status generally means the previous statement failed
$(which python || which python3 || true)
echo $?
0

简而言之,最后使用true始终为

提供零退出状态
 $( command || true )