Ось простий приклад:
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.