Я столкнулся с этой странной проблемой, когда мой статус выхода всегда возвращает 0, даже если он не выполнился успешно.
Я хочу вывести статус выхода в моем приглашении со следующим кодом:
function status() {
echo $?
}
export PS1="\$(status)>"
Когда я запускаю это, я получаю следующий вывод
0❯ pwd
/Users/tringuyen
0❯ ad
bash: ad: command not found
0❯ echo $?
127
ясно, что предпоследняя команда ad
не вернула код состояния 0. Однако это то, что я получил из подсказки.
Кто-нибудь знает, что здесь может происходить?
РЕДАКТИРОВАТЬ 20 6/11 11:57: Проблема, похоже, в том, что $?
всегда равно 0
, несмотря ни на что, за исключением того, что в самом файле .bashrc
была ошибка, из-за которой он возвращает значение, отличное от 0
.
$BASH_VERSION
это4.2.20(1)-release
. - person IMSoP   schedule 20.06.2013PS1="\$?>"
- person Grzegorz Żur   schedule 20.06.2013export PS1='$(RET=$?; if [ $RET == 0 ]; then echo "\[\033[1;30m\]$RET"; else echo "\[\033[0;31m\]$RET"; fi;) \[\033[1;32m\]\u@\h'
, что показывает последний статус возврата красным, если он был ненулевым, или серым для нуля. (Захват в$RET
позволяет избежать перезаписи другой логикой$?
до того, как мы его повторим.) - person IMSoP   schedule 20.06.2013$BASH_VERSION
это3.2.48(1)-release
. Я использую последнюю версию OS X Mountain Lion. - person Tri Nguyen   schedule 20.06.20133.2.33(1)-release
. Это обе коробки Gentoo Linux, так что возможно что-то другое. Другая возможность заключается в том, что у вас есть другой специальный набор переменных (возможно,$PS2
или$PROMPT_COMMAND
?), который каким-то образом перезаписывает$?
. - person IMSoP   schedule 20.06.2013$PS2
set. Это причина почему? Есть ли способ исправить это, не удаляя$PS2
? - person Tri Nguyen   schedule 20.06.2013echo $?
output127
; скорее кажется, что PS1 не содержит$?
- вы могли быecho $PS1
проверить. - person Armali   schedule 13.09.2013