我想让我的提示显示最后一个命令的退出状态,所以我将PS1设置为此:
PS1="$? > "
但是它总是打印0 >
。例如,即使当我运行false
时,提示符也不会显示1 >
或任何退出状态。
为什么会这样?
编辑:
我试图使用一个函数来设置我的提示,测试退出状态是否大于0,因此仅当退出状态为非零时,它才不会始终打印0 >
。
promptcmd() {
_EXIT=$?
test $_EXIT -gt 0 && printf "\e[1;31m [$_EXIT]"
printf "\e[0m ❯ "
unset _EXIT
}
PS1="$(promptcmd)"
但是它也不起作用。
$?
在您定义 PS1
时被展开,因为您使用了双引号。
您可以使用单引号将扩展推迟到显示PS1
:
PS1='$? > '
这种“双扩展”通常不是参数的属性,而是外壳如何使用PS1
的值的结果。 echo "$PS1"
仍将显示文字字符串$? >
,但是当shell显示提示时,它将扩展在值中找到的所有参数扩展。