Настройте bash для печати состояния выхода каждой введенной команды

Каждая команда, которую я набираю на bash, возвращается с кодом выхода.

Я хочу:
Всякий раз, когда я набираю команду в приглашении bash, я хочу, чтобы она выходила и печатала состояние выхода, т.е.

например. если я запускаю echo "hello"; в приглашении bash, результат должен быть:

linux@linux$ hello
linux@linux$ 0
12
задан 23 November 2016 в 15:17

3 ответа

Код выхода от последней выполняемой команды хранится в $? переменная среды. Таким образом, просто можно добавить эту переменную к командной строке по умолчанию, и Вам будут всегда печатать код выхода там. Подсказка хранится в $PS1 переменная среды. Это первоначально установлено в /etc/bash.bashrc сценарий и позже в $HOME/.bashrc.

Так отредактируйте строку в $HOME/.bashrc (/etc/bash.bashrc было бы в масштабе всей системы) от, он - значение по умолчанию:

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

к этому (например):

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w[$?] \$ '

Так подсказка по умолчанию в измененном на:

user@host:/path/to/dir[0] $

0 в скобках является Вашим кодом выхода, см.:

user@host:~[0] $ ls
user@host:~[0] $ ls /root/
ls: cannot open directory /root/: Permission denied
user@host:~[2] $ ^C
user@host:~[130] $

Поскольку значения видят http://www.tldp.org/LDP/abs/html/exitcodes.html

13
ответ дан 23 November 2016 в 15:17

Иначе то, что я выбрал от Дуги, Wiki должна была использовать trap:

EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR

Эффект:

$ ( exit 1 )
code 1

$ some-non-existent-command
some-non-existent-command: command not found
code 127

$
7
ответ дан 23 November 2016 в 15:17

Вот простой пример:

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} расширение параметра удара, которое средства удаляют самый короткий шаблон соответствия из передней стороны $var. Так в этом случае мы удаляем 0 от передней стороны $?, который эффективно усек бы код выхода 0.

При использовании двойных кавычек, $? был бы заменен когда PS1 установлен, вместо того, чтобы быть оцененным каждый раз. Сделать echo $PS1 для подтверждения Вас не имеют значения hardcoded в PS1.

2
ответ дан 23 November 2016 в 15:17

Другие вопросы по тегам:

Похожие вопросы: