如何将提示字符串(PS1)传递给命令并使文本结果为PS1?

时间:2016-12-08 04:48:15

标签: bash macos terminal .bash-profile ps1

我目前在.bash_profile中的内容是

export PS1="\w ↪ Bob♔ Home > "

我希望做的是像

export PS1="\w ↪ Bob♔ Home > " | lolcat

其中用于提示的普通字符串通过管道输入到lolcat命令中,其结果用于PS1。我该怎么做才能完成这项任务?

更新1:

使PS1随机彩虹色的任何其他方式也是可接受的选择。

最终更新

原来的问题没有答案,所以我选择了chw21的答案,因为这是真正的答案'原来的问题。

由于我无法使用lolcat,因此我在.bash_profile中使用了以下代码

randomNumberGen() { while :; do ran=$RANDOM; ((ran < 32760)) && echo $(((ran%7)+1)) && break; done }
numberRandom=$(randomNumberGen)
red=$(tput setaf 9)
orange=$(tput setaf 208)
yellow=$(tput setaf 11)
green=$(tput setaf 10)
blue=$(tput setaf 33)
indigo=$(tput setaf 12)
violet=$(tput setaf 55)
resetColor=$(tput sgr0)
if [ $numberRandom -eq 1 ]; then listVar=($red $orange $yellow $green $blue $indigo $violet);elif [ $numberRandom -eq 2 ]; then listVar=($orange $yellow $green $blue $indigo $violet $red);elif [ $numberRandom -eq 3 ]; then listVar=($yellow $green $blue $indigo $violet $red $orange);elif [ $numberRandom -eq 4 ]; then listVar=($green $blue $indigo $violet $red $orange $yellow);elif [ $numberRandom -eq 5 ]; then listVar=($blue $indigo $violet $red $orange $yellow $green);elif [ $numberRandom -eq 6 ]; then listVar=($indigo $violet $red $orange $yellow $green $blue);elif [ $numberRandom -eq 7 ]; then listVar=($violet $red $orange $yellow $green $blue $indigo);else echo "WHAT HAVE YOU DONE";fi
export PS1="\w \[${listVar[0]}\]↪ S\[$resetColor\]\[${listVar[1]}\]am\[$resetColor\]\[${listVar[2]}\]pl\[$resetColor\]\[${listVar[3]}\]e♔\[$resetColor\] \[${listVar[4]}\]Ho\[$resetColor\]\[${listVar[5]}\]me\[$resetColor\] \[${listVar[6]}\]> \[$resetColor\]"
export PROMPT_COMMAND='numberRandom=$(randomNumberGen);if [ $numberRandom -eq 1 ]; then listVar=($red $orange $yellow $green $blue $indigo $violet);elif [ $numberRandom -eq 2 ]; then listVar=($orange $yellow $green $blue $indigo $violet $red);elif [ $numberRandom -eq 3 ]; then listVar=($yellow $green $blue $indigo $violet $red $orange);elif [ $numberRandom -eq 4 ]; then listVar=($green $blue $indigo $violet $red $orange $yellow);elif [ $numberRandom -eq 5 ]; then listVar=($blue $indigo $violet $red $orange $yellow $green);elif [ $numberRandom -eq 6 ]; then listVar=($indigo $violet $red $orange $yellow $green $blue);elif [ $numberRandom -eq 7 ]; then listVar=($violet $red $orange $yellow $green $blue $indigo);else echo "WHAT HAVE YOU DONE";fi;export PS1='\''\w \[${listVar[0]}\]↪ S\[$resetColor\]\[${listVar[1]}\]am\[$resetColor\]\[${listVar[2]}\]pl\[$resetColor\]\[${listVar[3]}\]e♔\[$resetColor\] \[${listVar[4]}\]Ho\[$resetColor\]\[${listVar[5]}\]me\[$resetColor\] \[${listVar[6]}\]> \[$resetColor\]'\'''

代码说明:

首先,当执行randomNumberGen函数时,在1到7(包括)之间选择随机整数。其结果是numberRandom的值。

然后,使用tput将彩虹(ROYGBIV)的颜色分别设置为相应的颜色。

对于可能的七种情况,有一个列表,其中包含ROYGBIV的订购。

创建列表后,PS1会使用列表项作为颜色添加颜色。

注意:虽然这确实有用,但我不喜欢它的样子。因此,我可能会有七个列表,每个列表对应彩虹的每种颜色,并且七个列表中每个列表的项目都是浅色到深色的颜色。

1 个答案:

答案 0 :(得分:0)

考虑将此作为评论,因为它没有回答具体问题,但它太长了。

从根本上说,您可以在PS1

中包含程序的输出
PS1="\$(ls -m) $ "

然而,lolcat似乎有自己的字母着色方法,这是不相容的。我试过的时候

PS1="\$(echo \"\w ↪ Bob♔ Home > \" | lolcat)"

没有颜色。当我试图强迫lolcat时,就像这样:

PS1="\$(echo \"\w ↪ Bob♔ Home > \" | lolcat -f)"
结果很糟糕。