我在用着Ubuntu-18.04.2的原始~/.bashrc
文件我已经做了没有变化在任何原始文件中。
Ubuntu 18.04.2 用户是否遇到了我下面要向您描述的问题?请告诉我。
我注意到,改变当前路径的长度或 gnome-terminal 的宽度会导致奇怪的行为。我给你举个例子(我用字符|
来表示窗口的右边框):
username@hostname:/directory/directory/directory/dire |
ory/directory/directory/directory$ |
如您所见,在第一行,Ubuntu 终端隐藏了单词“directory”中的字符串“ct”;其他行都很好。我说字符串“ct”被隐藏是因为,如果我调整窗口宽度,它会重新出现,但其他两个字符被隐藏。例如:
username@hostname:/directory/directory/directory/di |
ctory/directory/directory/directory$ |
这次字符串“re”被隐藏了。问题总是发生在第一行!
我做了一些实验,发现不同的“奇怪”行为通过改变当前路径的长度或窗口宽度。我可以确定五种情况:
如果当前路径的长度很短,我可能会调整窗口宽度,但每一行仍然可以(任何行均无隐藏字符);
如果我稍微增加长度(例如添加一个目录),第一行的最后一个字符被隐藏;
如果我使用
cd ..
命令返回直到点 1 长度并调整窗口大小以使路径占据多行,则隐藏了五个字符(长度相同但行为不同);通过改变窗口宽度,部分行被覆盖如下例所示:........
m$ rname@hostname:/directory/directory/directory/directory |
$ ername@hostname:/directory/directory/directory/directory |
在第一个例子中,子字符串“use”被删除,字符“m”不知从何而来!第二个例子发生在我稍微缩短窗口宽度时:如您所见,子字符串“us”被删除。在这两种情况下,gnome-terminal 都允许我在该行上写入命令,而这些命令在我输入时会被删除。
如果我位于名称较短的目录中,例如 /usr 或 /home,则不会出现此问题,因为我无法将窗口缩短到足够短。但是,如果我创建一个较长的一级目录(例如 /directorydirectorydirectorydirectorydirectory),则通过调整窗口宽度会出现以下行为:
username@hostname:/directorydirectorydirectorydirectorydirector | m$ username@hostname:/directorydirectorydirectorydirectorydirecto | $ username@hostname:/directorydirectorydirectorydirectorydirect | $ y username@hostname:/directorydirectorydirectorydirectorydirec | {square box with 0010 inside}[[00m$ username@hostname:/directorydirectorydirectorydirectorydire | $ ory username@hostname:/directorydirectorydirectorydirectorydir | y$ ory username@hostname:/directorydirectorydirectorydirectorydi | ry$ or username@hostname:/directorydirectorydirectorydirectoryd | ory$ o username@hostname:/directorydirectorydirectorydirectory | tory$
$ grep PS1 ~/.bashrc
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
$ printf '%q\n' "$PS1"
\\\[\\e\]0\;\\u@\\h:\ \\w\\a\\\]\$\{debian_chroot:+\(\$debian_chroot\)\}\\\[\\033\[01\;32m\\\]\\u@\\h\\\[\\033\[00m\\\]:\\\[\\033\[01\;34m\\\]\\w\\\[\\033\[00m\\\]\\\$\
$ printf '%q\n' "$PROMPT_COMMAND"
''
$ locale
LANG=it_IT.UTF-8
LANGUAGE=it:en_US:en
LC_CTYPE="it_IT.UTF-8"
LC_NUMERIC=it_IT.UTF-8
LC_TIME=it_IT.UTF-8
LC_COLLATE="it_IT.UTF-8"
LC_MONETARY=it_IT.UTF-8
LC_MESSAGES="it_IT.UTF-8"
LC_PAPER=it_IT.UTF-8
LC_NAME=it_IT.UTF-8
LC_ADDRESS=it_IT.UTF-8
LC_TELEPHONE=it_IT.UTF-8
LC_MEASUREMENT=it_IT.UTF-8
LC_IDENTIFICATION=it_IT.UTF-8
LC_ALL=
答案1
我知道这已经过时了。我希望@John Doe,如果你解决了这个问题,你会报告解决方案。以下是我的一些想法:
- 我曾经看到过这种行为,但我认为它与特定的应用程序有关。
- TERM 环境变量与调整大小时对终端大小的检测之间存在交互。使用
stty size
来获取操作系统认为的终端宽度(第二个数字)的报告。我怀疑宽度比您通常情况下窗口允许的宽度多 2 列。观察调整窗口大小后它如何变化。您也可以通过 来控制它stty cols 75
。如果您将其减少 2 列并且问题得到解决,那么您就知道这是操作系统对终端宽度的混淆。 - 这可能是颜色变化伪字符与实际字符混淆的问题。尝试从提示 PS1 中删除所有颜色。
- 为了确保 gnome-terminal 和 terminfo 数据库没有损坏,请尝试:
apt-get install --reinstall gnome-terminal gnome-terminal-data tinfo5
。 - 尝试不同的 TERM 值。