使 PS1 提示可刷新

使 PS1 提示可刷新

我希望我的提示根据某个命令的输出而改变。并根据命令结果添加颜色。

例如:
运行命令:

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

(这将仅显示最后一个单词。

现在,如果结果是“注意”,我希望提示是:

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

因此“注意”一词将变为绿色。

但是如果单词是“down”,我希望提示采用不同的颜色:

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

我希望更改是“即时的”,这意味着在每一行(按 Enter 键)上我希望提示根据结果进行更新。

如果可能的话,应该通过 .bashrc 使其永久生效。

关于如何使其工作有什么想法吗?

答案1

这对我有用(使用 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
)]# '

答案2

您需要利用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

相关内容