Подтвердить что ты не робот

Настройте приглашение zsh при отображении предыдущего кода выхода команды

Zsh включает в себя возможность отображения кода возврата/выхода предыдущей команды в приглашении с помощью escape-последовательности %?.

Однако я хотел бы получить следующее приглашение:

[email protected] ~ [%?] %

когда код выхода отличается от 0 и:

[email protected] ~ %

когда код выхода равен 0.

Если я использую только %?, он всегда отображается, даже если %? равно 0. Кроме того, я хочу квадратные скобки, но только тогда, когда код выхода не равен 0.

Каков самый простой способ сделать это?

4b9b3361

Ответ 1

Добавьте это в позицию в PS1, где вы хотите, чтобы появился код выхода:

%(?..[%?] )

Это условное выражение. Часть между двумя точками (ничего в этом случае) не выводится, если выражение перед первой точкой равно true. Часть после второй точки выводится, если она неверна.

Например:

PS1='%n%m %~ %(?..[%?] )%# '

Ответ 2

В качестве альтернативы вы можете:

setopt PRINT_EXIT_VALUE

чтобы всегда печатать новую строку, показывающую предыдущее возвращаемое значение.

Я не предпочитаю это для обычного использования, но он часто хорош для отладки сценариев оболочки.