在 GNU Screen 中,调用 bash history 命令显示实际位置左侧一个字符的位置

在 GNU Screen 中,调用 bash history 命令显示实际位置左侧一个字符的位置

我正在运行 Red Hat 5 32 位(2.6.18-194.26.1.el5)。

问题是,当我调用 bash 历史记录中的任何先前命令时,命令中的第一个字符会在 shell 提示符后立即显示,中间没有任何空格,如下所示:

\[me@mymachine tmp]$man mysql

如果我输入 Ctrl-C,然后重新输入命令,它看起来像这样:

\[me@mymachine tmp]$ man mysql

这使得调用命令并在重新输入之前对其进行编辑变得非常麻烦。基本上,如果我尝试编辑调用的命令,我的更改将发生在屏幕上所见内容左侧的一个字符位置(我相信)。描述起来有点乏味,而且似乎只发生在带有大量参数的命令上。

更新:/etc/sysconfig/bash-prompt-screen 的内容,

1 #!/bin/bash
2 echo -n $'\033'"_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"$'\033\\\\'

以及 /etc/bashrc 的内容,

 24   screen)
 25     if [ -e /etc/sysconfig/bash-prompt-screen ]; then
 26       PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
 27     else
 28     PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\033\\"'
 29     fi
 30     ;;

我已通过重命名禁用了 bash-prompt-screen——这样就修复了问题。RHEL 5 最新版本的 screen 中很可能已经修复了 bash-prompt-screen 提示行。该错误出现在 Screen 版本 4.00.03 (FAU) 23-Oct-06 下。(我注意到队列中有一个更新,在我写这篇文章时它正在安装。)

答案1

您的提示定义有误。其格式应为:

PS1='\[non-printing-sequence\]printing-sequence'

例如:

PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\]\$ '

其将显示为青色用户名和蓝色主机名。

不知何故,您在输出中得到了一个文字\[。请检查您的文字和转义括号,以确保它们正确无误。

答案2

/etc/sysconfig/bash-prompt-screen 

有一个额外的 '\'

这意味着我们需要将其缩短为以下内容以消除多余的“\”!

#!/bin/bash
echo -n $'\033'"_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"$'\033\\'

注意:好消息!这只是一个屏幕设置。

相关内容