这个烦人的错误让我很困扰。当我输入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