2012-06-06 31 views
0

我找到了一個很好的自定義我的.bashrc爲我的提示顯示額外信息並提供顏色突出顯示。這是我有:shell .bashrc無法處理文字換行

# ----- Define a few Colors 
BLACK='\e[0;30m' 
BLUE='\e[0;34m' 
GREEN='\e[0;32m' 
CYAN='\e[0;36m' 
RED='\e[0;31m' 
PURPLE='\e[0;35m' 
BROWN='\e[0;33m' 
LIGHTGRAY='\e[0;37m' 
DARKGRAY='\e[1;30m' 
LIGHTBLUE='\e[1;34m' 
LIGHTGREEN='\e[1;32m' 
LIGHTCYAN='\e[1;36m' 
LIGHTRED='\e[1;31m' 
LIGHTPURPLE='\e[1;35m' 
YELLOW='\e[1;33m' 
WHITE='\e[1;37m' 

function __setprompt { 
    local SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'` 
    local SSH2_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'` 
    if [ $SSH2_IP ] || [ $SSH_IP ] ; then 
    local SSH_FLAG="@\h" 
    fi 
    PS1="$CYAN[\u$SSH_FLAG:$BROWN\w$CYAN]\\$ $NOCOLOR" 
    PS2="$CYAN>$NOCOLOR " 
    PS4='$CYAN+$NOCOLOR ' 
} 
__setprompt 

我遇到的問題是,它不能正確處理包裝文本(見下面的截圖)。任何人都可以就這個問題提供任何建議嗎?看起來它根本不會調整用戶鍵入的內容。

Command prompt example

+1

使用嗎?它看起來可能是終端仿真的問題,而不是提示。 –

+0

我正在使用Putty,但是隻有在實現此bashrc更改後纔會出現問題 – Webnet

回答

2

什麼的CYANBROWNNOCOLOR瓦爾價值?
你很可能忘了將它們包裝在\[\],
中,以便將它們標記爲非印刷字符。

如果您CYAN

CYAN="\e[0;36m" 

你需要用它\[\],像

CYAN="\[\e[0;36m\]" 

否則,包裹瓦爾自己在提示變量,如

PS2="\[$CYAN\]>\[$NOCOLOR\] " 

在這裏看到的意見:

function __setprompt { 
    local SSH_IP="${SSH_CLIENT%% *}"  # no need for echo/awk/sed 
    local SSH2_IP="${SSH2_CLIENT%% *}" # use parameter expansion instead 
    if [[ -n "$SSH2_IP" || -n "$SSH_IP" ]]; then # bash uses double brakets 
    local SSH_FLAG="@\h"      # and the OR operator works inside 
    fi 
    PS1="\[$CYAN\][\u$SSH_FLAG:\[$BROWN\]\w\[$CYAN\]]\\$ \[$NOCOLOR\]" # dont mess with [ and ] 
    PS2="\[$CYAN\]>\[$NOCOLOR\] "          # only wrap color vars in \[ and \] 
    PS4="\[$CYAN\]+\[$NOCOLOR\] "     # single quotes will not expand $vars 
} 
__setprompt 

也,看看PROMPT_COMMAND變量,

PROMPT_COMMAND
如果置位,該值被作爲命令發出每個初級之前執行提示。

也注意到,convension資本變量名都保持由您使用的終端客戶在什麼環境

+0

我在原始文章中添加了我的顏色...我也在網絡上找到了這些顏色。看起來他們缺乏尾隨的']'。 ''''''表示什麼?它如何在缺失一件的情況下仍然有效? – Webnet

+0

不,'['和']'好,你需要在'\ ['和'\]'中包裝每個顏色變量,看我更新的答案 – c00kiemon5ter