我有关于bash终端的问题,它让我发疯,我不知道为什么
这是关于终端,让我描述如下:
起初提示符如下:
[12:00]ruan:~>
但是当我连续输入字符时(例如,假设我输入了很多A),发生了奇怪的事情:
AAA:00]ruan:~ > AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
正如您所看到的,我输入的字符从行的开头开始,这使我的命令不可读。我不知道怎么会发生这种情况。它与stty,inputrc还是别的什么有关?
/ BR
ruan
我的tty配置就像:
:)[11:38]ruan:~ > stty -a
speed 38400 baud; 25 rows; 80 columns;
lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
我设置了PS1,如:
NORMAL="\033[0m"
RED="\033[0;31m"
RED_BOLD="\033[1;31m"
GREEN="\033[0;32m"
GREEN_BOLD="\033[1;32m"
YELLOW="\033[0;33m"
YELLOW_BOLD="\033[1;33m"
BLUE="\033[0;34m"
BLUE_BOLD="\033[1;34m"
MAGENTA="\033[0;35m"
MAGENTA_BOLD="\033[1;35m"
CYAN="\033[0;36m"
CYAN_BOLD="\033[1;36m"
function smile_or_frown() {
[[ $? = 0 ]] && echo -e "${CYAN_BOLD}:)" || echo -e "${MAGENTA_BOLD}:("
}
export PS1="\$(smile_or_frown)$BLUE_BOLD[\A]$GREEN_BOLD\u:$RED_BOLD\w$YELLOW_BOLD\$(parse_git_branch)$NORMAL > "
答案 0 :(得分:1)
您必须在\[ .. \]
中包含所有ANSI转义序列,以便向Bash发出信号,告知这些转义不占用终端上的空间。
它们必须是格式字符串本身,并且不能成为在提示时扩展的数据的一部分(但可以在分配时扩展数据)。
例如:
export PS1="\[$BLUE_BOLD\][\A]\[$GREEN_BOLD\]\u:\[$RED_BOLD\]\w\[$YELLOW_BOLD\]\$(parse_git_branch)\[$NORMAL\] > "
要使这个工作适用于smile_or_frown,你必须将它重构为两个函数,一个用于颜色,一个用于文本,这样你就可以"\[\$(smile_color)\]\$(smile_type)"
答案 1 :(得分:0)
运行此命令以检查当前终端列(宽度)
tput cols
并使用它将其设置为80 cols:
stty cols 80
编辑:根据您编辑过的问题,您的复杂PS1
会出现这种情况。您可以将PS1
重置为简单:
PS1='$>'
也解决了这个问题。