我在互联网上看到了以下bash语句:
PYTHON_BIN_PATH=$(which python || which python3 || true)
我了解如果which python
失败,则会which python3
执行,但我不会在条件结束时理解true
的目的。有什么想法吗?
答案 0 :(得分:2)
尝试运行:(注意 bla )
which python_bla || which python3_bla_bla || true
echo $?
0
您将获得RC=0
。这意味着它是一个成功进入下一个命令的构造。我们知道python_bla
或python3_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 )