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

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

Я хочу: всякий раз, когда я набираю команду в приглашении bash, я хочу, чтобы она завершила выход и распечатала состояние выхода, то есть echo $?. [ ! d1]

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

linux@linux$ hello
linux@linux$ 0
1
задан 23 November 2016 в 16:17

2 ответа

Еще один способ, который я выбрал из Arch 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

$
4
ответ дан 24 May 2018 в 16:21
  • 1
    Это не совсем соответствует требованиям OP, так как он хочет распечатать статус выхода, даже если он равен нулю, но именно точно то, что я искал. – Keith Thompson 4 October 2014 в 08:08
  • 2
    @KeithThompson, который может быть выполнен путем захвата DEBUG вместо ERR. – muru 4 October 2014 в 12:36

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

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

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

2
ответ дан 24 May 2018 в 16:21
  • 1
    Спасибо, с января 2018 года. Я хочу, чтобы нормальное приглашение с кодом выхода в начале, если оно отличное от нуля - это очень помогает. – SDsolar 10 January 2018 в 20:47

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

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