如何将提示字符串 (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)"
结果一团糟。
我目前在 .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)"
结果一团糟。