2009-07-15 27 views
35

我在OS X(10.5.7)Terminal中做了一些事情來打破我的Bash Shell提示符。Shell Prompt Line Wrapping問題

這是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           export PS1="\[ 
\e[1;32m\]\h\[\e[0m\]:           cd Library/Appl 
ication\ Support/

我也試過\033而不是\e。我只是在那裏提供了PS2的信息,我沒有改變從安裝默認的。如果我完全刪除顏色代碼,那麼一切正常,任何想法?

+0

'$ TERM'是什麼?如果我沒有記錯,Terminal.app的終端仿真與terminfo數據庫中的任何內容都不完全匹配,但「dtterm」接近。 – ephemient 2009-07-15 18:51:30

+0

我已經在Fedora8上的bash 3.2.33上試過了你的PS1。即使在動態改變終端的寬度時,它也可以很好地工作。它在更改高度時會打印重複的行,但是Ctrl-L會修復該行。可能是一個bug ... – neuro 2009-07-16 16:54:03

+0

@ephemient我的$ TERM是'xterm-color' – Rob 2009-07-16 20:45:35

回答

2

Bash中的換行問題並不新鮮。查閱郵件列表,也許還有另外一個錯誤。

除了標記不可打印的字符外,您不能做太多的工作,其餘的工作必須由提示代碼完成。

+0

謝謝,我只是想確認我已經正確地逃脫了事情。 – Rob 2009-07-16 20:50:09

1

看來你已經正確地逃脫和封閉的序列。

解決方法我總是使用它在最後添加'\ n'。我發現它更清晰並減少了包裝問題的任何問題。我的PS1的確切到底是:

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

一個很好的HOWTO你可能知道:

Bash prompt howto

20

This stackoverflow thread似乎有關。正如有人在該主題中指出的那樣,Bash FAQ at mywiki.wooledge.org討論瞭如何在Bash提示(FAQ 53)中正確引用顏色代碼,並正確調用終端顏色(FAQ 37)。

+0

使用tput生成我的顏色代碼,如本FAQ中所述: http://mywiki.wooledge。org/BashFAQ/037 而且我的提示會更好地滾動。不過,我也在OS X的新版本上,所以我不確定哪個可能解決了這個問題。 – Rob 2010-05-05 14:36:29

45

我現在用的這個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

+1

謝謝!這讓我瘋狂了很久。我認爲訣竅是你做顏色的方法。我使用這種顏色(這是藍色粗體):\ e [0; 34m – 2011-11-04 16:13:57

+1

也適合我!謝謝 – 2013-06-06 09:01:04

+1

謝謝!這讓我瘋狂。 – Joshua 2014-02-13 19:06:48

0

以供將來參考這個問題,這是我用:

export PS1="\[\033[0;31m\][\[email protected]:\w]$\[\033[0m\] "

這將顯示我的shell提示下以:

[[email protected]:~]$

幫助我活和DEV區分這些網站。

+2

這與OP的問題有什麼關係? – 2014-01-29 09:47:13

1

這是我的:這是我找到的最好的一個,但我最初發現它的網站缺少轉義字符,導致了換行問題。我修補它,並最終得到它的工作。它顯示您的用戶,路徑和分支信息,具有良好的對比度,色彩明智。

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幫助。

0

「禁用了javascript -s checkwinsize」也適用於Cygwin的包裝問題也

0

如果您使用的標題欄招"\e]2;titlebar\a",確保逃生太:"\[\e]2;titlebar\a\]"

1

我注意到,有一些即使在環境變量PS1PROMPT中沒有特殊字符,也會提示光標定位問題。

如果我們輸出的文件末尾沒有行尾字符。它會混淆提示。

您可以通過執行重現此:

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

並按下了鍵多次,你會看到提示感到困惑。

你可以看到這樣的例子在行動:

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

發生這種情況時,只需按<CTRL-C>和提示會恢復正常。

請注意,ZShell沒有這個問題。