使用函数的彩色 bash 提示
coloured bash prompt which uses a function
我需要制作一个 bash 提示,该提示使用另一个函数返回的数据。我需要提示支持颜色
玩具箱:
fx() {
...some processing...
# x is the result of some processing
color=x
echo "\[$(tput setaf ${color})\]${data_from_processing}\[${tput sgr0}\]"
}
PS1='fx'
但是上面的解决办法好像不行。我期望的是指定颜色的 'data'。但是我得到的是\[\]<the correct data>\[\]
。需要注意的是\]<the correct data\[
是彩色的
shell 在计算命令替换之前解析 PS1
的值(包括识别特殊转义序列 \[
和 \]
)。
最简单的解决方法是将 \[
和 \]
替换为 shell 的实际字节数:
q() { printf '[=10=]1%s[=10=]2123[=10=]1%s[=10=]2' "$(tput setaf 1)" "$(tput sgr0)"; }
但是,我建议使用 PROMPT_COMMAND
来 assemble PS1
的值,而不是嵌入命令替换:
q () { echo "\[$(tput setaf 1)\]123\[$(tput sgr0)\]"; }
make_prompt () {
PS1="$(q):"
}
PROMPT_COMMAND=make_prompt
当然你可以把q
的定义直接折叠到make_prompt
的定义中。请注意,我们不会延迟对 q
的调用;它会立即被调用以创建 PS1
的值以用于每个提示。
我需要制作一个 bash 提示,该提示使用另一个函数返回的数据。我需要提示支持颜色
玩具箱:
fx() {
...some processing...
# x is the result of some processing
color=x
echo "\[$(tput setaf ${color})\]${data_from_processing}\[${tput sgr0}\]"
}
PS1='fx'
但是上面的解决办法好像不行。我期望的是指定颜色的 'data'。但是我得到的是\[\]<the correct data>\[\]
。需要注意的是\]<the correct data\[
是彩色的
shell 在计算命令替换之前解析 PS1
的值(包括识别特殊转义序列 \[
和 \]
)。
最简单的解决方法是将 \[
和 \]
替换为 shell 的实际字节数:
q() { printf '[=10=]1%s[=10=]2123[=10=]1%s[=10=]2' "$(tput setaf 1)" "$(tput sgr0)"; }
但是,我建议使用 PROMPT_COMMAND
来 assemble PS1
的值,而不是嵌入命令替换:
q () { echo "\[$(tput setaf 1)\]123\[$(tput sgr0)\]"; }
make_prompt () {
PS1="$(q):"
}
PROMPT_COMMAND=make_prompt
当然你可以把q
的定义直接折叠到make_prompt
的定义中。请注意,我们不会延迟对 q
的调用;它会立即被调用以创建 PS1
的值以用于每个提示。