2008-12-04 52 views
24

这里是我的PS1变量:PS1换行的颜色问题

PS1='\u:\W$(__git_ps1 "\e[32m\][%s]\e[0m\]")$ ' 

的拿起我的Git分支伟大的作品,但它有包装的时候颜色是活跃线的不幸的副作用,所以它们在使用长命令时重叠。

任何有PS1魔法技能的人都可以帮我解决这个问题吗?

回答

39

明白了,需要正确地逃避颜色。

修复:

PS1='\u:\W$(__git_ps1 "\[\e[32m\][%s]\[\e[0m\]")$ ' 
+0

谢谢,这让我很快乐! – Viktiglemma 2011-04-07 08:31:41

+5

对于那些懒得做差异的人来说,为了让bash能够正确地将打印字符计数到行的开头,终端转义符应该被'\ [``\]`包围“。 http://manpages.ubuntu.com/manpages/precise/en/man1/bash.1.html#contenttoc26 – alberge 2013-06-27 00:31:57

+0

Aupajo,我有一个类似的问题,使用生成的PS1。我不知道有什么不能正确逃脱。有什么建议么?我的命令是:`export PS1 =“\ [\ e [0; 40m \] \ h:\ W \ u \ 033 [0; 32m \ $(parse_git_branch)\ [\ e [0m \] $”` – karl 2013-08-13 17:42:16

16

我建议在猛砸颜色下面的方法,它使代码更可读和很多困难你千万不能错过逃生或两个。

放在你的〜/ .bashrc

BLACK=$(tput setaf 0) 
RED=$(tput setaf 1) 
GREEN=$(tput setaf 2) 
LIME_YELLOW=$(tput setaf 190) 
YELLOW=$(tput setaf 3) 
POWDER_BLUE=$(tput setaf 153) 
BLUE=$(tput setaf 4) 
MAGENTA=$(tput setaf 5) 
CYAN=$(tput setaf 6) 
WHITE=$(tput setaf 7) 
BRIGHT=$(tput bold) 
NORMAL=$(tput sgr0) 
BLINK=$(tput blink) 
REVERSE=$(tput smso) 
UNDERLINE=$(tput smul) 

样本PS1以下(或真的什么是打印在屏幕上)将是:

PS1="\[${WHITE}\](\[${YELLOW}\]\[email protected]\h\[${WHITE}\])\[${NORMAL}\]$ " 

你只需把\ [\ ]周围的颜色词。

如果你有一个256色的终端,你可以与其他数值试验,以“tput的setaf”一路攀升至255

1

这些是我经常使用的颜色功能......写了他们多年之前已经习惯了他们,他们是我的脚本的常规部分。只需将此代码块粘贴到您的.bashrc文件中,开始一个新的会话,然后设置好!

我使用这些丰富多彩/时尚printf的替代品:

## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ## 
## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ [ Aesthir's Color Functions ] ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ## 
## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ## 
Normal() { printf '\e[m'"$*"; }     ; Tblack() { printf '\e[0;30m'"$*"'\e[m'; } 
TNormal() { printf '\e[m'"$*"; }     ; Tred() { printf '\e[0;31m'"$*"'\e[m'; } 
Bold() { printf '\e[1m'"$*"'\e[m'; }    ; Tgreen() { printf '\e[0;32m'"$*"'\e[m'; } 
TBold() { printf '\e[1m'"$*"'\e[m'; }   ; Tbrown() { printf '\e[0;33m'"$*"'\e[m'; } 
Underline() { printf '\e[4m'"$*"'\e[m'; }  ; Tyellow() { printf '\e[0;33m'"$*"'\e[m'; } 
TUnderline() { printf '\e[4m'"$*"'\e[m'; }  ; Tblue() { printf '\e[0;34m'"$*"'\e[m'; } 
Flash() { printf '\e[5m'"$*"'\e[m'; }   ; Tmagenta() { printf '\e[0;35m'"$*"'\e[m'; } 
TFlash() { printf '\e[5m'"$*"'\e[m'; }   ; Tpurple() { printf '\e[0;35m'"$*"'\e[m'; } 
Invert() { printf '\e[7m'"$*"'\e[m'; }   ; Taqua() { printf '\e[0;36m'"$*"'\e[m'; } 
TInvert() { printf '\e[7m'"$*"'\e[m'; }   ; Tcyan() { printf '\e[0;36m'"$*"'\e[m'; } 
Invisible() { printf '\e[8m'"$*"'\e[m'; }  ; Tgrey() { printf '\e[0;37m'"$*"'\e[m'; } 
TInvisible() { printf '\e[8m'"$*"'\e[m'; }  ; Twhite() { printf '\e[0;37m'"$*"'\e[m'; } 
## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ Bold Color Text ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ## ∞∞∞∞∞∞∞∞∞∞∞∞ Underlined Color Text ∞∞∞∞∞∞∞∞∞∞∞∞∞ ## 
TblackB() { printf '\e[1;30m'"$*"'\e[m'; }  ; TblackU() { printf '\e[4;30m'"$*"'\e[m'; } 
TgreyB() { printf '\e[1;30m'"$*"'\e[m'; }  ; TredU() { printf '\e[4;31m'"$*"'\e[m'; } 
TredB() { printf '\e[1;31m'"$*"'\e[m'; }   ; TgreenU() { printf '\e[4;32m'"$*"'\e[m'; } 
TgreenB() { printf '\e[1;32m'"$*"'\e[m'; }  ; TbrownU() { printf '\e[4;33m'"$*"'\e[m'; } 
TbrownB() { printf '\e[1;33m'"$*"'\e[m'; }  ; TyellowU() { printf '\e[4;33m'"$*"'\e[m'; } 
TyellowB() { printf '\e[1;33m'"$*"'\e[m'; }  ; TblueU() { printf '\e[4;34m'"$*"'\e[m'; } 
TblueB() { printf '\e[1;34m'"$*"'\e[m'; }  ; TmagentaU() { printf '\e[4;35m'"$*"'\e[m'; } 
TmagentaB() { printf '\e[1;35m'"$*"'\e[m'; }  ; TpurpleU() { printf '\e[4;35m'"$*"'\e[m'; } 
TpurpleB() { printf '\e[1;35m'"$*"'\e[m'; }  ; TaquaU() { printf '\e[4;36m'"$*"'\e[m'; } 
TaquaB() { printf '\e[1;36m'"$*"'\e[m'; }  ; TcyanU() { printf '\e[4;36m'"$*"'\e[m'; } 
TcyanB() { printf '\e[1;36m'"$*"'\e[m'; }  ; TgreyU() { printf '\e[4;37m'"$*"'\e[m'; } 
TwhiteB() { printf '\e[1;37m'"$*"'\e[m'; }  ; TwhiteU() { printf '\e[4;37m'"$*"'\e[m'; } 
## ∞∞∞∞∞∞∞∞∞∞∞∞∞ Flashing Color Text ∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ## ∞∞∞∞∞∞∞∞∞∞∞∞∞ Inverted Color Text ∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ## 
TblackF() { printf '\e[5;30m'"$*"'\e[m'; }  ; TblackI() { printf '\e[7;40m'"$*"'\e[m'; } 
TredF() { printf '\e[5;31m'"$*"'\e[m'; }   ; TredI() { printf '\e[7;41m'"$*"'\e[m'; } 
TgreenF() { printf '\e[5;32m'"$*"'\e[m'; }  ; TgreenI() { printf '\e[7;42m'"$*"'\e[m'; } 
TbrownF() { printf '\e[5;33m'"$*"'\e[m'; }  ; TbrownI() { printf '\e[7;43m'"$*"'\e[m'; } 
TyellowF() { printf '\e[5;33m'"$*"'\e[m'; }  ; TyellowI() { printf '\e[7;43m'"$*"'\e[m'; } 
TblueF() { printf '\e[5;34m'"$*"'\e[m'; }  ; TblueI() { printf '\e[7;44m'"$*"'\e[m'; } 
TmagentaF() { printf '\e[5;35m'"$*"'\e[m'; }  ; TmagentaI() { printf '\e[7;45m'"$*"'\e[m'; } 
TpurpleF() { printf '\e[5;35m'"$*"'\e[m'; }  ; TpurpleI() { printf '\e[7;45m'"$*"'\e[m'; } 
TaquaF() { printf '\e[5;36m'"$*"'\e[m'; }  ; TaquaI() { printf '\e[7;46m'"$*"'\e[m'; } 
TcyanF() { printf '\e[5;36m'"$*"'\e[m'; }  ; TcyanI() { printf '\e[7;46m'"$*"'\e[m'; } 
TgreyF() { printf '\e[5;37m'"$*"'\e[m'; }  ; TgreyI() { printf '\e[7;47m'"$*"'\e[m'; } 
TwhiteF() { printf '\e[5;37m'"$*"'\e[m'; }  ; TwhiteI() { printf '\e[7;47m'"$*"'\e[m'; } 
## ∞∞∞∞∞∞∞∞∞∞∞∞∞ Invisible Color Text ∞∞∞∞∞∞∞∞∞∞∞∞∞ ## ∞∞∞∞∞∞∞∞ Plain Text on Color Background ∞∞∞∞∞∞∞∞ ## 
TblackV() { printf '\e[8;30m'"$*"'\e[m'; }  ; Bblack() { printf '\e[m'"$*"'\e[m'; } 
TredV() { printf '\e[8;31m'"$*"'\e[m'; }   ; Bred() { printf '\e[0;41m'"$*"'\e[m'; } 
TgreenV() { printf '\e[8;32m'"$*"'\e[m'; }  ; Bgreen() { printf '\e[0;42m'"$*"'\e[m'; } 
TbrownV() { printf '\e[8;33m'"$*"'\e[m'; }  ; Bbrown() { printf '\e[0;43m'"$*"'\e[m'; } 
TyellowV() { printf '\e[8;33m'"$*"'\e[m'; }  ; Byellow() { printf '\e[0;43m'"$*"'\e[m'; } 
TblueV() { printf '\e[8;34m'"$*"'\e[m'; }  ; Bblue() { printf '\e[0;44m'"$*"'\e[m'; } 
TmagentaV() { printf '\e[8;35m'"$*"'\e[m'; }  ; Bmagenta() { printf '\e[0;45m'"$*"'\e[m'; } 
TpurpleV() { printf '\e[8;35m'"$*"'\e[m'; }  ; Bpurple() { printf '\e[0;45m'"$*"'\e[m'; } 
TaquaV() { printf '\e[8;36m'"$*"'\e[m'; }  ; Baqua() { printf '\e[0;46m'"$*"'\e[m'; } 
TcyanV() { printf '\e[8;36m'"$*"'\e[m'; }  ; Bcyan() { printf '\e[0;46m'"$*"'\e[m'; } 
TgreyV() { printf '\e[8;37m'"$*"'\e[m'; }  ; Bgrey() { printf '\e[0;47m'"$*"'\e[m'; } 
TwhiteV() { printf '\e[8;37m'"$*"'\e[m'; }  ; Bwhite() { printf '\e[0;47m'"$*"'\e[m'; } 
## ∞∞∞∞∞∞∞∞∞ Bold Text on Color Background ∞∞∞∞∞∞∞∞ ## ∞∞∞∞∞∞ Underlined Text on Color Background ∞∞∞∞∞ ## 
BblackB() { printf '\e[1;40m'"$*"'\e[m'; }  ; BblackU() { printf '\e[4;40m'"$*"'\e[m'; } 
BredB() { printf '\e[1;41m'"$*"'\e[m'; }   ; BredU() { printf '\e[4;41m'"$*"'\e[m'; } 
BgreenB() { printf '\e[1;42m'"$*"'\e[m'; }  ; BgreenU() { printf '\e[4;42m'"$*"'\e[m'; } 
BbrownB() { printf '\e[1;43m'"$*"'\e[m'; }  ; BbrownU() { printf '\e[4;43m'"$*"'\e[m'; } 
ByellowB() { printf '\e[1;43m'"$*"'\e[m'; }  ; ByellowU() { printf '\e[4;43m'"$*"'\e[m'; } 
BblueB() { printf '\e[1;44m'"$*"'\e[m'; }  ; BblueU() { printf '\e[4;44m'"$*"'\e[m'; } 
BmagentaB() { printf '\e[1;45m'"$*"'\e[m'; }  ; BmagentaU() { printf '\e[4;45m'"$*"'\e[m'; } 
BpurpleB() { printf '\e[1;45m'"$*"'\e[m'; }  ; BpurpleU() { printf '\e[4;45m'"$*"'\e[m'; } 
BaquaB() { printf '\e[1;46m'"$*"'\e[m'; }  ; BaquaU() { printf '\e[4;46m'"$*"'\e[m'; } 
BcyanB() { printf '\e[1;46m'"$*"'\e[m'; }  ; BcyanU() { printf '\e[4;46m'"$*"'\e[m'; } 
BgreyB() { printf '\e[1;47m'"$*"'\e[m'; }  ; BgreyU() { printf '\e[4;47m'"$*"'\e[m'; } 
BwhiteB() { printf '\e[1;47m'"$*"'\e[m'; }  ; BwhiteU() { printf '\e[4;47m'"$*"'\e[m'; } 
## ∞∞∞∞∞∞∞ Flashing Text on Color Background ∞∞∞∞∞∞ ## ∞∞∞∞∞∞∞ Inverted Text on Color Background ∞∞∞∞∞∞ ## 
BblackF() { printf '\e[5;40m'"$*"'\e[m'; }  ; BblackI() { printf '\e[7;30m'"$*"'\e[m'; } 
BredF() { printf '\e[5;41m'"$*"'\e[m'; }   ; BredI() { printf '\e[7;31m'"$*"'\e[m'; } 
BgreenF() { printf '\e[5;42m'"$*"'\e[m'; }  ; BgreenI() { printf '\e[7;32m'"$*"'\e[m'; } 
BbrownF() { printf '\e[5;43m'"$*"'\e[m'; }  ; BbrownI() { printf '\e[7;33m'"$*"'\e[m'; } 
ByellowF() { printf '\e[5;43m'"$*"'\e[m'; }  ; ByellowI() { printf '\e[7;33m'"$*"'\e[m'; } 
BblueF() { printf '\e[5;44m'"$*"'\e[m'; }  ; BblueI() { printf '\e[7;34m'"$*"'\e[m'; } 
BmagentaF() { printf '\e[5;45m'"$*"'\e[m'; }  ; BmagentaI() { printf '\e[7;35m'"$*"'\e[m'; } 
BpurpleF() { printf '\e[5;45m'"$*"'\e[m'; }  ; BpurpleI() { printf '\e[7;35m'"$*"'\e[m'; } 
BaquaF() { printf '\e[5;46m'"$*"'\e[m'; }  ; BaquaI() { printf '\e[7;36m'"$*"'\e[m'; } 
BcyanF() { printf '\e[5;46m'"$*"'\e[m'; }  ; BcyanI() { printf '\e[7;36m'"$*"'\e[m'; } 
BgreyF() { printf '\e[5;47m'"$*"'\e[m'; }  ; BgreyI() { printf '\e[7;37m'"$*"'\e[m'; } 
BwhiteF() { printf '\e[5;47m'"$*"'\e[m'; }  ; BwhiteI() { printf '\e[7;37m'"$*"'\e[m'; } 
## ∞∞∞∞∞∞ Invisible Text on Color Background ∞∞∞∞∞∞ ## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ Color Code Notes ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ## 
BblackV() { printf '\e[8;40m'"$*"'\e[m'; }  ## Unless I missed something or made a mistake, I ## 
BredV() { printf '\e[8;41m'"$*"'\e[m'; }  ## calculate a total of 7681 different color codes, ## 
BgreenV() { printf '\e[8;42m'"$*"'\e[m'; }  ## none of which produce a duplicate result.  ## 
BbrownV() { printf '\e[8;43m'"$*"'\e[m'; }  ##      These will be fine for now. ## 
ByellowV() { printf '\e[8;43m'"$*"'\e[m'; } 
BblueV() { printf '\e[8;44m'"$*"'\e[m'; } 
BmagentaV() { printf '\e[8;45m'"$*"'\e[m'; } 
BpurpleV() { printf '\e[8;45m'"$*"'\e[m'; } 
BaquaV() { printf '\e[8;46m'"$*"'\e[m'; } 
BcyanV() { printf '\e[8;46m'"$*"'\e[m'; } 
BgreyV() { printf '\e[8;47m'"$*"'\e[m'; } 
BwhiteV() { printf '\e[8;47m'"$*"'\e[m'; } 
## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ## 
``

牢记想要一个%百分号或\反斜杠时,唯一的事情,你需要将它们里面翻倍:
喜欢:printf "$(Tblue "%%s")\n" 'hi'
而不是Tblue "%s\n" 'hi'
printf "$(Tblue "%s" 'hi')\n"

由于这些用printf,你可以做的东西,如:

printf "hi $(Tred there) man $(BaquaI "%c" '!') $(Bold 'This \\t is %%s') %s\n" "$(BgreenB 'super')" "$(Bblue mega Colorful)"
或回声:
echo "hi $(Tred there) man $(BaquaI "%c" '!') $(Bold 'This \\t is %s' "$(BblackB 'super')") $(Bblue mega Colorful)"
一个更有用的例子:
printf "\t%s Volume \"%s\" is not connected.\n" "$(TwhiteB [)$(TredB Error)$(TwhiteB \]:)" "$(Tbrown $Volume)"
或与其它命令:
eval "echo 'This is OSX' | sed 's:OSX:$(Invert [)$(TaquaF OSX)$(Invert ]):'"
或者多一点斯旺克的东西:
find . -exec stat -f "Name: $(Tbrown %%N)%t%t$(Tpurple "->")%tPermissions: $(Tgreen %%Sp)" {} \;

发挥你的想象力!随意使用这些...我唯一要求的是,如果有人在那里输入更多,混合/匹配它们(比如TcyanBgreenUI),或者制作自己的名字......请将它们发布给我和让我知道这个帖子?或通过电子邮件发送给我[email protected]。我懒得输入全部的可能性。

享受!

- Aesthir