.bashrc中的最后一个命令退出代码比较

时间:2019-01-28 15:03:19

标签: bash

您可能都知道,bash可以打印最后一个命令退出代码。这对我有用,但是我想通过添加if语句来检查$?是否为0来改进它。如果为0,则以白色打印代码;如果不同,则以红色打印。不幸的是,这似乎不起作用:

if [ $? == "0" ]; then
        PS1=${PS1}'$(echo ${?})'
else
        PS1=${PS1}'\e[1;31m\]$(echo ${?})'
fi

我也尝试过:

if [ $(echo $?) == "0" ]; then
        PS1=${PS1}'$(echo ${?})'
else
        PS1=${PS1}'\e[1;31m\]$(echo ${?})'
fi

还:

if [ $(echo ${?}) == "0" ]; then
        PS1=${PS1}'$(echo ${?})'
else
        PS1=${PS1}'\e[1;31m\]$(echo ${?})'
fi

他们都没有工作。

Somehow变量始终为0,因此以白色打印。

我怎么可能打印退出代码,但不能用"if"检查退出代码?这是bash限制吗,还是我做错了什么?

2 个答案:

答案 0 :(得分:0)

只需将filter 'all' bmodel__text__icontains=search_word添加到PS1。

$?

如果要更改颜色,则必须在PS1内进行更改,而不是静态地进行更改。...还要注意,> PS1='PS $ ' > PS $ echo 1 > 1 > PS $ PS1='PS $? $ ' > PS 0 $ false > PS 1 $ true > PS 0 $ 会更改其值,因此需要保存。

$?

答案 1 :(得分:0)

$? last 命令的退出状态。如果执行某些命令,例如[ … = … ],则$?会更改。示例:

myCmd
echo $? # prints exit status of myCmd
echo $? # prints exit status of echo 

myCmd
if [ $? = 0 ]; then
    echo $? # prints exit status of `[`, here 0 
else
    echo $? # prints exit status of `[`, here 1 
fi

如果以后要访问myCmd,请在另一个变量中存储其退出状态。

myCmd
exitStatus=$?
echo $exitStatus # prints exit status of myCmd
echo $exitStatus # prints exit status of myCmd 

顺便说一句:"$(echo ${?})"太复杂了;只是"$?"在各个方面都更好。