根据值修改提示

根据值修改提示

假设我在 .bash_profile 中定义了一个环境变量,如下所示:

PS1='\[\e[31;1m\][\u@\h \T \w] \[\e[0m\]'

这个变量使我的 Linux 提示符显示某些信息,例如:

[jeff@node21 01:48:30 ~] [jeff@node22 01:48:30 ~] [jeff@node23 01:48:30 ~] [jeff@master 01:48:30 ~]

当“master”这个词出现时,我想将其大写(我不会在该节点上做任何工作,并且当我忘记在rsh其他节点上做任何工作时,我希望它能够脱颖而出)。

我不能sed在变量上使用PS1,因为它不包含“master”一词。

最终,我希望当我在节点“master”上时提示符大写。有没有办法评估变量“PS1”,操作字符串,然后重新分配它以便提示起作用?

答案1

假设您使用的是最新版本的bash,您可以通过PROMPT_COMMAND使用变量 inPS1而不是 来完成此操作\h

PROMPT_COMMAND='
  myhost=$(hostname)
  if [[ $myhost == master ]]; then
    myhost=${myhost^^}
  fi
'

PS1='\[\e[31;1m\][\u@$myhost \T \w] \[\e[0m\]'

PROMPT_COMMAND在写入每个提示之前都会运行其中的任何内容。上述定义设置myhost为 的输出hostname,并且如果myhost掌握,它通过${var^^}扩展而变为大写。

答案2

另一种方法是

PS1='\[\e[31;1m\][\u@$(hostname | perl -pe "\$_ = uc if m/master/") \T \w] \[\e[0m\]'

我承认我的建议不像雷神那样结构良好,但基本上很高兴知道这一点

$(cmd)

是命令替换的语法,就像通常在bash.

还有一个不错的如何它只处理 bash 提示符的配置。这绝对值得一读。

相关内容