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

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

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

user@host ~ [%?] %

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

user@host ~ %

когда код выхода 0.

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

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

2 ответов


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

%(?..[%?] )

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

например:

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

кроме того, вы можете:

setopt PRINT_EXIT_VALUE

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

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