Переменная $? не работает на $PS1 на mksh
Я хочу, чтобы мое приглашение показывало статус выхода последней команды, поэтому я установил для своего 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)"
Но это тоже не работает.
1 ответ
$?
был расширен, когда вы определили PS1
, потому что вы использовали двойные кавычки.
Вы можете использовать одинарные кавычки, чтобы отложить раскрытие до PS1
отображается:
PS1='$? > '
Такое "двойное расширение" не является свойством параметров в целом, а является результатом того, как оболочка использует значение PS1
. echo "$PS1"
по-прежнему будет показывать буквальную строку $? >
, но когда оболочка отображает приглашение, она расширяет любые раскрытия параметров, найденные в значении.