获取实际提示长度

问题描述 投票:0回答:2

我想在我的 gnome 终端上打印这样的东西

[abc@host pwd]$ ************************************************************

在 PS1 中使用一些操作,但星星的数量是动态的,具体取决于 PS1 和 端子宽度。那么有人可以建议我如何找出 PS1 的长度,即将显示的实际字符串吗?

bash prompt ps1
2个回答
0
投票

可以从 Bash 环境变量中读取当前行长度

COLUMNS

要将提示设置为始终为一行星号,其数量等于按下 Enter 时终端的确切宽度(加上两端的换行符),即使在评估

~/.bashrc
后更改宽度,也请包括以下为
~/.bashrc

function generate_prompt ()
{
    prompt="\n"
    for ((i = 0; i < $COLUMNS; i++)); do
        prompt+='*'
    done
    prompt+="\n"
    echo -e $prompt
}
export PS1="\$(generate_prompt)"

如果您希望在提示中获得其他输出,然后用星号字符填充该行的其余部分,则必须从

$COLUMNS
中减去其他输出的长度。我不知道该怎么做。


-3
投票

在我看来,它无法移植,因为

PS1
可以包含颜色代码的转义序列,也可以包含(多个)新行。

可以计算。但这是一项非常艰巨的任务。如果用户在变量名中编码颜色代码(这是常见情况),如何决定(在评估/计算长度期间)这是用户想要显示的内容还是只是样式信息?

© www.soinside.com 2019 - 2024. All rights reserved.