gnome-terminal 隐藏当前路径第一行的结束字符

gnome-terminal 隐藏当前路径第一行的结束字符

我在用着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”被隐藏了。问题总是发生在第一行!

我做了一些实验,发现不同的“奇怪”行为通过改变当前路径的长度或窗口宽度。我可以确定五种情况:

  1. 如果当前路径的长度很短,我可能会调整窗口宽度,但每一行仍然可以(任何行均无隐藏字符)

  2. 如果我稍微增加长度(例如添加一个目录),第一行的最后一个字符被隐藏

  3. 如果我使用cd ..命令返回直到点 1 长度并调整窗口大小以使路径占据多行,则隐藏了五个字符(长度相同但行为不同)

  4. 通过改变窗口宽度,部分行被覆盖如下例所示:........m$ rname@hostname:/directory/directory/directory/directory |

    $ ername@hostname:/directory/directory/directory/directory |

在第一个例子中,子字符串“use”被删除,字符“m”不知从何而来!第二个例子发生在我稍微缩短窗口宽度时:如您所见,子字符串“us”被删除。在这两种情况下,gnome-terminal 都允许我在该行上写入命令,而这些命令在我输入时会被删除。

  1. 如果我位于名称较短的目录中,例如 /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,如果你解决了这个问题,你会报告解决方案。以下是我的一些想法:

  1. 我曾经看到过这种行为,但我认为它与特定的应用程序有关。
  2. TERM 环境变量与调整大小时对终端大小的检测之间存在交互。使用stty size来获取操作系统认为的终端宽度(第二个数字)的报告。我怀疑宽度比您通常情况下窗口允许的宽度多 2 列。观察调整窗口大小后它如何变化。您也可以通过 来控制它stty cols 75。如果您将其减少 2 列并且问题得到解决,那么您就知道这是操作系统对终端宽度的混淆。
  3. 这可能是颜色变化伪字符与实际字符混淆的问题。尝试从提示 PS1 中删除所有颜色。
  4. 为了确保 gnome-terminal 和 terminfo 数据库没有损坏,请尝试:apt-get install --reinstall gnome-terminal gnome-terminal-data tinfo5
  5. 尝试不同的 TERM 值。

相关内容