我正在运行 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\\'
注意:好消息!这只是一个屏幕设置。