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

пример:
запустите команду:

cphaprob stat | grep local | awk '{ print $NF }'`

(это покажет только последнее слово.

Теперь, если результат "внимание", я хочу, чтобы приглашение было:

PS1='[\t][\u@\h]\[\e[0;92m\][attention]\[\e[0m\]# '  

поэтому слово "внимание" будет зеленым.

Однако, если слово будет "вниз", я хочу, чтобы подсказка была другого цвета:

PS1='[\t][\u@\h]\[\e[4;91m\][Down]\[\e[0m\]# '

Я хочу, чтобы изменение было «на лету», означая в каждой новой строке (нажатие Enter), я хочу, чтобы приглашение обновлялось в зависимости от результата.

Если возможно, это должно быть как-то сделано постоянным через .bashrc.

Есть идеи, как заставить это работать?

2 ответа2

0

Вам нужно будет использовать переменную PROMPT_COMMAND а также переменную PS1 , переопределяя переменную PS1 внутри PROMPT_COMMAND . Я позволю вам сослаться на другие ответы для уточнения того, как выполнить вашу конкретную потребность, но это разрешит запрос на обновление "на лету". Это была проблема, с которой я столкнулся при работе с включением статуса выхода в каждом новом приглашении (если не ноль).

Например, мои файлы конфигурации bash «создают» приглашение PS1, которое впоследствии устанавливается с помощью следующей команды (где переменная ps1 представляет то, что я хочу, чтобы моя переменная PS1 была):

export PROMPT_COMMAND="export PS1=\"$ps1\""

Вот мой полный файл .bash_prompt для вашей справки (который я просто включаю из .bashrc):https://gist.github.com/austinbeam/10930268

0

Это работает для меня (используя Bash 4.2.37):

PS1='[\t][\u@\h][$(i=$(cphaprob stat|grep local|awk "{print \$NF}")
u=0
case $i in
(Active|attention) c=92;;
(Down|Error) u=4; c=91;;
(Standby) c=93;;
(Ready) c=94;;
(*) c=95 ;;
esac
printf "\033[%s;%sm%s\033[0m" $u $c $i
)]# '

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .