Вывести возвращаемое значение после выполнения программы

Мне интересно, как установить опцию автоматической печати возвращаемого значения после каждого выполнения программы в терминале без ввода echo $?.

Это что-то, что можно настроить? Кодовые блоки имеют эту функцию.

9
задан 8 March 2016 в 05:10

2 ответа

Да, существует два пути. Нужно установить 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 ] 
$> 
10
ответ дан 8 March 2016 в 15:10

Метод, который я выбрал от Дуги 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

Эффект:

enter image description here

В действительности все, что я должен сделать, внимательно наблюдают за желтым code в выводе для знания команды перестал работать.

4
ответ дан 8 March 2016 в 15:10
  • 1
    Явление hasn' t произошел для меня за несколько недель, таким образом, я надеюсь, что проблема была устранена. – Renardo 24 July 2017 в 04:55

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

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