2013-07-16 1 views
1

я мой ЗШ проворный сконфигурирован для отображения другой строки в зависимости от того, был ли статус выхода последней команды ноля или ноля, скак получить имя сигнала в приглашении

# Pimp my prompt. 
PS1="%{${ESC}[38;5;204m%}%n%{$reset%}"    # Username 
PS1="[email protected]%{${ESC}[38;5;104m%m$reset%}"    # @Machine 
PS1="$PS1:%{${ESC}[38;5;78m%}%~%{$reset%}"   # :Directory 
PS1="$PS1$NL%(0?,,%{${ESC}[38;5;0m${ESC}[48;5;162m%}%?%{$reset%})" # Status 
PS1="$PS1%(#.#.$) "         # Prompt 

Теперь мне интересно, могу ли я сделать подсказку, содержащую имя сигнала, если состояние выхода> 128, т.е. для 129 содержит HUP для 130 INT и т. Д. Список сигналов в моей системе (увеличение номера сигнала от 1 до 32 < => статус выхода от 129 до 160):

$ kill -l 
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2 THR 

ответ

2

Это должно быть сделано, хотя вам нужно немного настроить его для подсказки.

get_exit_code() { 
    # Grab the last exit status. 
    VALUE=$? 

    if [[ VALUE -eq 0 ]]; then 
     # Don't display anything if we got a clean exit code. 
     echo "" 
    else 
     # Get the name of the exit code, then return. 
     NAME=`kill -l ${VALUE}` 
     echo "${NAME}" 
    fi 
} 

# Use the function in our prompt. 
export PROMPT=$'$ $(get_exit_code) ' 

Вот пример вывода из моей системы:

$ 
$ return 3 
$ QUIT return 129 
$ HUP return 2 
$ INT 
+0

Примечание: я должен был изменить свой конфиг включить 'setopt promptsubst' так PS1 претерпит подстановку команд. – Jens

+0

FWIW, код не имеет знака '$' в условии if: 'if [[$ VALUE ...' – Francisco

+0

@Francisco Код работает как отправлено, хотя - '$' не представляется необходимым. Это можно проверить, поместив слово в оператор echo в эту условную ветвь, которая будет выводиться только после состояния выхода 0. Я не знаю, почему '' 'не требуется. – simont

 Смежные вопросы

  • Нет связанных вопросов^_^