如何将提示字符串(PS1)输送到命令中,并使文本结果为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函数时,选择一个随机整数(包含)。其结果是numberrandom的值。

然后,使用TPUT分别将彩虹(Roygbiv)的颜色单独设置为相应的颜色。

在可能的七种情况下,有一个列表,列出了Roygbiv的顺序。

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

注意:尽管这确实有效,但我不喜欢它的外观。因此,我可能有七个列表,每种彩虹的每种颜色都有一个,并且七个列表中的每个列表都是颜色的光谱。

考虑将其作为评论,因为它没有回答特定的问题,但是太长了。

从根本上讲,您可以在PS1中包括程序的输出:

PS1="$(ls -m) $ "

但是,lolcat似乎有自己的字母着色的方法,这是不兼容的。当我尝试

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

没有颜色。当我试图强迫洛卡特时,这样:

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

结果是一团糟。

最新更新