Вот простой пример:
PS1='$? > '
Если вы используете двойные кавычки, вам нужно добавить обратную косую черту, чтобы выйти из $:
PS1="\$? > "
Выход:
0 > echo 'ok'
ok
0 > bogus
bogus: command not found
127 >
Еще лучший способ - напечатать только код выхода, если он не равен нулю.
PS1='${?#0}> ' # single quote example
PS1="\${?#0}> " # double quote example (requires extra backslash)
Пример вывода:
> echo 'ok'
ok
> bogus
bogus: command not found
127>
Объяснение: ${var#pattern} - это расширение параметра bash, которое означает удаление кратчайшего совпадающего шаблона с лицевой стороны $ var. Таким образом, в этом случае мы удаляем 0 с фронта $?, что эффективно сокращает код выхода из 0.
Если использовать двойные кавычки, $? будет заменен, когда PS1 устанавливается, а не оценивается каждый раз. Сделайте echo $PS1, чтобы подтвердить, что у вас нет жестко заданного значения в PS1.