printf 之后 bash 提示混乱

printf 之后 bash 提示混乱

这个烦人的错误让我很困扰。当我输入printf foo或 时echo -n foo,当我浏览之前的命令时,bash 提示符就会出现故障。以下是我的.bashrc

bash_get_exit_status(){ STATUS=$?; if [ $STATUS -eq 0 ]; then echo -en "\001\033[01;32m\002"; else echo -en "\001\033[01;31m\002"; fi; echo -n "[$STATUS]"; }
export PS1="\[\e]0;\u@\h: \w\a\]\$(bash_get_exit_status) \[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\\\$ "

输出bash --version

bash --version
GNU bash, version 5.0.17(1)-release (aarch64-unknown-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

提示行为:

echo -n foo #glitches prompt
echo -en "foo\nbar" #last line gets removed when scrolled up
echo -e "foo\nbar" #no problem

我在网上找不到任何结果。我放弃了,并在这里问了。

答案1

bash_get_exit_status在提示符中创建/包含大量非打印字符和代码。这会让 bash 感到困惑。

背景:
您必须有\[之前和\]之后;从而封闭非打印字符/代码/片段。

更多信息:
$ man bash输入一个/,然后PROMPTING直接输入并点击ENTER

相关内容