Делая PS1 быстрое обновление

305
AlonCo

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

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

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.

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

0

2 ответа на вопрос

0
jlliagre

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

PS1='[\t][\u@\h][$(i=$(cphaprob stat|grep local|awk "") 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 )]# ' 
Являются ли «внимание» и «Вниз» единственно возможными значениями? jlliagre 10 лет назад 0
Так какие цвета вы ожидаете для других значений? jlliagre 10 лет назад 0
Ответ обновлен. jlliagre 10 лет назад 0
Ответ обновлен снова и сделан проще. Вы должны поместить этот код в ваш .bashrc, что означает, что вы не должны удваивать обратную косую черту в `\ $ NF`. jlliagre 10 лет назад 0
Привет, если я не ставлю двойную обратную косую черту, я получаю синтаксическую ошибку. есть ли способ пообщаться здесь? Мне нужно немного объяснений. Спасибо AlonCo 10 лет назад 0
Какую ОС и какую оболочку вы используете (точно)? jlliagre 10 лет назад 0
и вы только что вырезали и вставили этот кусок кода в ваш .bashrc или вы делали что-то еще? Какое точное сообщение об ошибке вы получили? jlliagre 10 лет назад 0
это межсетевой экран CheckPoint Gaia Bash. Как я могу узнать, какую версию Bash я использую? AlonCo 10 лет назад 0
Этот сделал это хорошо. PS1 = '[\ t] [Expert @ $ HOSTNAME] $ (i = $ (cphaprob stat | grep local | awk "") case $ i в (внимание) printf "\ [\ e [ 4; 92 м \] [Активное внимание] \ [\ e [0 м \] ";; (Актив) printf" \ [\ e [0; 92 м \] [Актив] \ [\ e [0 м \] ";; ( Ожидание) printf "\ [\ e [0; 93 м \] [Ожидание] \ [\ e [0 м \]" ;; (Вниз) printf "\ [\ e [4; 91 м \] [Вниз] \ [\ e [0m \] ";; (Готово) printf" \ [\ e [4; 96m \] [Готово] \ [\ e [0m \] ";; (*) printf" \ [\ e [0; 101м \ ] [Ошибка] \ [\ e [0m \] ";; esac) # ' AlonCo 10 лет назад 0
Рад, что ты сделал это. Чтобы узнать, какую версию bash вы используете, запустите `bash --version`. jlliagre 10 лет назад 0
0
daBeamer

Вам нужно будет использовать как 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

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