Вот простой пример:
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.