如何将提示字符串 (PS1) 通过管道传输到命令中并使文本结果为 PS1?

How can I pipe a prompt string (PS1) into a command and have the text result be PS1?

我目前在 .bash_profile 中的是

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

我想做的是

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

其中用于提示的普通字符串通过管道传输到 lolcat 命令,其结果用于 PS1。我该如何着手完成这项任务?

更新 1:

使 PS1 随机变成彩虹色的任何其他方法也是可以接受的替代方法。

最终更新

原问题没有答案,所以我选择了 chw21 的答案,因为它是原问题的真实 'answer'。

由于我不能使用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 使用列表项作为颜色添加了颜色。

注意:虽然这确实有效,但我不喜欢它的外观。所以,我可能会有七个列表,彩虹的每种颜色一个,并且七个列表中的每一个的项目都是颜色的明暗光谱。

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

从根本上说,您可以在 PS1:

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

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

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

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

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

结果一团糟。