Joh*_*Doe 15 gnome command-line bash gnome-terminal 18.04
我使用的是Ubuntu-18.04.2 的原始~/.bashrc文件,我没有对任何原始文件进行任何更改。
Ubuntu 18.04.2 用户是否会遇到我将在下面向您描述的问题?请告诉我。
通过改变当前路径的长度或 gnome 终端的宽度,我注意到了一些奇怪的行为。我给你举个例子(我用字符|来表示窗口的右边框):
username@hostname:/directory/directory/directory/dire |
ory/directory/directory/directory$ |
Run Code Online (Sandbox Code Playgroud)
如您所见,在第一行,Ubuntu 终端隐藏了单词“directory”的字符串“ct”;其他行没问题。我说字符串“ct”是隐藏的,因为如果我调整窗口宽度的大小,它会重新出现,但其他两个字符被隐藏了。例如:
username@hostname:/directory/directory/directory/di |
ctory/directory/directory/directory$ |
Run Code Online (Sandbox Code Playgroud)
这次隐藏了字符串“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$
Run Code Online (Sandbox Code Playgroud)
$ 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"
''
Run Code Online (Sandbox Code Playgroud)
$ 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=
Run Code Online (Sandbox Code Playgroud)
我知道这已经很旧了。我希望@John Doe,如果你解决了这个问题,你会报告解决方案。以下是我的一些想法:
stty size获取操作系统认为终端的宽度(第二个数字)的报告。我怀疑宽度比名义情况下窗口允许的宽度多两列。观察调整窗口大小时情况如何变化。您也可以通过 来控制它stty cols 75。如果将其减少 2 列并且问题得到解决,那么您就知道这是操作系统对终端宽度的混淆。apt-get install --reinstall gnome-terminal gnome-terminal-data tinfo5。