Мне интересно, как установить опцию автоматической печати возвращаемого значения после каждого выполнения программы в терминале без ввода echo $?
.
Это что-то, что можно настроить? Кодовые блоки имеют эту функцию.
Да, существует два пути. Нужно установить PROMPT_COMMAND
в .bashrc
, другой - для установки замены команды в PS1
для echo $?
команда.
Метод 1:
Из страницы руководства удара:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each primary prompt.
Независимо от того, что Вы устанавливаете эту переменную на, будет выполнен прежде, чем привлечь подсказку каждый раз. Демонстрация:
$> PROMPT_COMMAND=" echo 'Last command exited with' \$? 'code' "
Last command exited with 0 code
$> ls /etc/passwd > /dev/null
Last command exited with 0 code
$> ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
Last command exited with 2 code
$>
Отметьте использование \$?
. Для постоянного изменения сохраните его в .bashrc
Метод 2
Предположим мой PS1
подсказка установлена как это:
PS1='
user@ubuntu:$> '
Если я хочу запустить некоторую программу каждый раз, когда эта подсказка перерисовывается на экране (который после каждый предшествует выполнениям команды), я должен был бы использовать command substitution $(. . .)
и набор это в подсказке как так:
PS1=' [ $? ]
user@ubuntu: $> '
Демонстрация:
$> PS1=' [ $? ]
> $>_ '
[ 0 ]
$>_ ls /etc/passwd > /dev/null
[ 0 ]
$>_ ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
[ 2 ]
$>_
Заметьте, что я разделил свой PS1 на две строки, вершина будет иметь [ exitcode ]
и нижняя часть $> <blank space>'
. Именно поэтому существует >
прежде $> '
на второй строке (Продвижение >
PS2
подсказка для многострочных команд). С другой стороны, Вы могли сделать что-то вроде этого (заметьте $'...'
структура):
$> PS1=$'[ $? ] \n$> '
[ 0 ]
$>
Метод, который я выбрал от Дуги Wiki, к trap
ERR
. trap
привык в Bash к командам выполнения, когда сигнал получен, или наверняка другие события. ERR
прерывание, работал каждый раз, когда текущая командная строка завершается с ошибкой - возвращаемое значение не 0. (Если бы это действительно обычно завершалось, то возвращаемое значение, очевидно, было бы 0.)
Так, например:
trap 'printf "\ncode %d\n\n" $?' ERR
Затем:
$ echo foo
foo
$ false
code 1
$
(Примечание: никакое сообщение после echo
команда, которая работала успешно - Что означает то, когда я ввожу команду и терминал, ничего не делает?)
Подсказка Wiki Дуги шла вперед и цветной сообщение, так, чтобы Вы получили значимое желтое сообщение:
EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR
Эффект:
В действительности все, что я должен сделать, внимательно наблюдают за желтым code
в выводе для знания команды перестал работать.