Страницы

Поиск по вопросам

суббота, 27 октября 2018 г.

Bash: изменить цвет prompt в зависимости от exit status последней команды

Я хочу визуализировать в консоли статус завершения последней команды.
Если последняя команда выполнилась со статусом 0, т. е. без ошибок, должен быть стандартный зеленый цвет. А если статус был не 0, то цвет должен быть красный.

Вот на примере строка после false должна быть красная. Желательно еще вывести статус завершения, если он не 0.
Как это сделать?


Ответ

Если говорим о bash, в оболочке есть встроенные переменные отвечающие за настройки строки ввода.
PROMPT_COMMAND Если установлена, значение воспринимается как команда выполняемая до выдачи основного приглашения командной строки ($PS1) PS1 Основная переменная приглашения командной строки. Значение по умолчанию \s-\v\$
Можно написать свою функцию и добавить в ~/.bashrc файл. Разбив задачку на шаги получим:
[статичный] [динамический] [станичный]
_prmtcmd() { local EXIT="$?"
local NA='\[\e[0m\]' local R='\[\e[0;31m\]' local G='\[\e[0;32m\]' local B='\[\e[1;34m\]'
# Статичный: имя пользователя и хоста PS1="${G}\u@\h${NA}
"
# Динамический: выход из последней выполненной команды if [ $EXIT != 0 ]; then PS1+="[${R}false${NA}] " else PS1+="[${G}true${NA}] " fi
# Статичный: приглашение к вводу PS1+="${B}~$ ${NA}" }
PROMPT_COMMAND=_prmtcmd
Графический пример выполнения:

Смотрите модификаторы для каждого из цветов в документации (ссылки ниже).
Ссылки
https://www.gnu.org/software/bash/manual/html_node/Variable-Index.html#Variable-Index http://misc.flogisoft.com/bash/tip_colors_and_formatting

Комментариев нет:

Отправить комментарий