1

我希望我的提示显示最后一个命令的退出状态,所以我将我的 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)"

但它也不起作用。

4

1 回答 1

1

$?在您定义 时已扩展PS1,因为您使用了双引号。

您可以使用单引号将扩展延迟到PS1显示:

PS1='$? > '

这种“双重扩展”通常不是参数的属性,而是shell如何使用PS1. echo "$PS1"仍将显示文字 string $? >,但当 shell 显示提示时,它将展开在值中找到的任何参数扩展。

于 2020-02-12T12:21:45.093 回答