【问题标题】:Shell Prompt Line Wrapping IssueShell 提示换行问题
【发布时间】:2010-11-11 02:34:26
【问题描述】:

我已经做了一些事情来破坏我在 OS X (10.5.7) 终端中的 Bash Shell 提示。

这是我配置的 PS1:

PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '

据我所知,我的颜色命令正确转义。但是,当我在命令历史记录中上下滚动时,如果历史命令包含多行,我经常会遇到换行问题。

我将提示简化为以下内容:

PS1='\[\e[1m\]\h:\w\$ \[\e[0m\]'
PS2='> '

我仍然看到类似的东西:

localhost:~/Library/Application Support/Firefox/Profiles/knpmxpup.Defau
lt/extensions/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$ expocd \{1A2D0EC4-7
5F5-4c91-89C4-3656F6E 出口 PS1="\[
\e[1;32m\]\h\[\e[0m\]: cd 库/Appl
ication\支持/

我也尝试过\033 而不是\e。我只是将 PS2 包含在其中以获取信息,我没有更改安装默认值。如果我完全删除颜色代码,那么一切正常,有什么想法吗?

【问题讨论】:

  • 什么是$TERM?如果我没记错的话,Terminal.app 的终端仿真与 terminfo 数据库中的任何内容都不完全匹配,但 dtterm 很接近。
  • 我已经在 Fedora8 上的 bash 3.2.33 上尝试过你的 PS1。即使在动态更改终端的宽度时,它也适用于长线。它在更改高度时会打印重复的行,但 Ctrl-L 可以解决此问题。可能是一个错误...
  • @ephemient 我的 $TERM 是 'xterm-color'
  • 如果TERM=dtterm 仍然存在问题(可通过终端的设置在某处进行配置),那么我不知道。我接触 OS X 已经好几年了。

标签: bash colors prompt ansi-escape


【解决方案1】:

Bash 中的换行问题并不是什么新鲜事。您的 PS1 应该可以正常工作,但 Bash 3.2.49 中有一个错误。查看邮件列表,有yet another bug regarding thisconfirmed to be fixed in 4.0

你只能用\[\]标记不可打印的字符,其余的必须通过提示代码来完成。

【讨论】:

  • 谢谢,我只是想确认我已经正确地逃脱了。
  • 对于从谷歌登陆这里的人来说,原帖没有任何问题。关键是使用\[\](Rob 做到了)。有关解决您可能做错了什么的答案(对我来说也是如此,哈哈),请参阅here(尽管标题暗示了它,但它不是特定于 mac 的)。
【解决方案2】:

我现在在用这个PS1,效果不错:

green=$(tput setaf 2)
blue=$(tput setaf 4)
bold=$(tput bold)
reset=$(tput sgr0)
PS1="\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ "

现在滚动浏览我的命令历史似乎可以处理换行。但是与此同时,自从提出这个问题以来,我也将我的 OS X 更新到了 10.6.3

【讨论】:

  • 谢谢!这让我发疯了很长时间。我认为诀窍是你做颜色的方法。我使用这种风格的颜色(这个是蓝色粗体):\e[0;34m
  • 这是 OS X 的真正答案,包括最新的 Mavericks 和 Yosemite,谢谢。
  • +1 代表 El Capitan 和 tput setaf\[$green\] 语法对我有用;我在PROMPT_COMMAND 中使用了${green},这导致了奇怪的同行换行。
  • 在 macOS Sierra 上,\e[38;5;220m 的标准使用给我带来了换行的麻烦,但简单地用\[ ... \] 换行似乎可以解决问题。
  • @Pascal(以及未来的其他人),最初的问题应该有效,但当时 bash 中存在错误。 lists.gnu.org/archive/html/bug-bash/2009-07/msg00016.html
【解决方案3】:

我注意到即使PS1PROMPT 环境变量中没有特殊字符,提示光标定位也存在一些问题。

如果我们输出的文件末尾没有行尾字符。它会混淆提示。

您可以通过以下方式重现:

curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt

并多次按向上键,您会看到提示变得混乱。

你可以看到这个例子:

https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca

出现这种情况时,只需按<CTRL-C>,提示就会恢复正常。

请注意,ZShell 没有这个问题。

【讨论】:

    【解决方案4】:

    如果您使用标题栏技巧"\e]2;titlebar\a",请确保也将其转义:"\[\e]2;titlebar\a\]"

    【讨论】:

      【解决方案5】:

      'shopt -s checkwinsize' 也适用于 Cygwin 包装问题

      【讨论】:

        【解决方案6】:

        This stackoverflow thread 似乎相关。正如有人在该线程中指出的那样,Bash FAQ at mywiki.wooledge.org 讨论了如何在 Bash 提示 (FAQ 53) 中正确引用颜色代码,以及正确调用终端颜色 (FAQ 37)。

        【讨论】:

        • 使用 tput 生成我的颜色代码,如本常见问题解答中所述:mywiki.wooledge.org/BashFAQ/037 我的提示滚动得更好。但是我也在使用新版本的 OS X,所以我不确定哪个可能解决了这个问题。
        【解决方案7】:

        这是我的:这是我找到的最好的,但我最初发现它的网站缺少转义字符,导致换行问题。我对它进行了修补,终于让它工作了。它以良好的对比度和颜色显示您的用户、路径和分支信息。

        export PS1='\[\e[1;37m\]\[\e[1;32m\]\u\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]|\[\e[0;39m\]\$'
        

        另外,添加

        GIT_PS1_SHOWDIRTYSTATE=true
        

        在分支“脏”时显示标记(存在要提交的更改)

        export HISTCONTROL=ignoredups
        

        在向上滚动浏览 bash 历史记录时忽略重复项也很有用。

        bind "set completion-ignore-case on" 
        

        也有帮助。

        最后,

        shopt -s checkwinsize
        

        如果问题仍然存在,可能对 OSX 有帮助。

        【讨论】:

          【解决方案8】:

          为了将来参考,这是我使用的:

          export PS1="\[\033[0;31m\][\u@Project:\w]$\[\033[0m\] "

          这会将我的 shell 提示显示为:

          [ec2-user@Project:~]$

          帮助我区分实时网站和开发网站。

          【讨论】:

          • 这与OP的问题有什么关系?
          【解决方案9】:

          您似乎正确地转义和封闭了序列。

          无论如何我都会使用它在末尾添加一个'\n'的解决方法。我发现它更清晰并减少了包装问题的任何问题。我的 PS1 的确切结尾是:

          '\n\[\033[0;30m\]$\[\033[0m\]
          

          你可能知道的一个很好的方法:

          Bash prompt howto

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-02
          • 2014-03-18
          • 1970-01-01
          相关资源
          最近更新 更多