2017-08-12 4 views
1

Meine Bash-Prompt Variable in .profile das wie folgt aussieht:Bash Prompt nicht konvertieren Zeichen entkam

# $vars 
# Always display last 2 directories of current path 
current_dir() { 
    pwd | awk -F\/ '{print $(NF-1),$(NF)}' | sed 's/ /\//g' 
} 
# Current git branch 
parse_git_branch() { 
    git branch 2> /dev/null | sed -e '/^[^​*]/d' -e 's/*​ \(.*\)/ (\1)/' 
} 

txtblk='\e[0;30m' # Black - Regular 
txtred='\e[0;31m' # Red 
txtgrn='\e[0;32m' # Green 
txtylw='\e[0;33m' # Yellow 
txtblu='\e[0;34m' # Blue 
txtpur='\e[0;35m' # Purple 
txtcyn='\e[0;36m' # Cyan 
txtwht='\e[0;37m' # White 
bldblk='\e[1;30m' # Black - Bold 
bldred='\e[1;31m' # Red 
bldgrn='\e[1;32m' # Green 
bldylw='\e[1;33m' # Yellow 
bldblu='\e[1;34m' # Blue 
bldpur='\e[1;35m' # Purple 
bldcyn='\e[1;36m' # Cyan 
bldwht='\e[1;37m' # White 
unkblk='\e[4;30m' # Black - Underline 
undred='\e[4;31m' # Red 
undgrn='\e[4;32m' # Green 
undylw='\e[4;33m' # Yellow 
undblu='\e[4;34m' # Blue 
undpur='\e[4;35m' # Purple 
undcyn='\e[4;36m' # Cyan 
undwht='\e[4;37m' # White 
bakblk='\e[40m' # Black - Background 
bakred='\e[41m' # Red 
badgrn='\e[42m' # Green 
bakylw='\e[43m' # Yellow 
bakblu='\e[44m' # Blue 
bakpur='\e[45m' # Purple 
bakcyn='\e[46m' # Cyan 
bakwht='\e[47m' # White 
txtrst='\e[0m' # Text Reset 

#   User  Current path (last 2 dirs) Git branch   Switch to white color 
export PS1="$txtcyn\u $txtpur\$(current_dir) $txtgrn\$(parse_git_branch)\[\033[00m\] \n\$ " 

meine Bash-Prompt sollte also eigentlich meinen Benutzernamen zeigen, das aktuelle Verzeichnis der git Zweig (falls vorhanden) und dann eine $ in einer neuen Zeile (wie oben bereits kommentiert). Aber stattdessen zeigt es die Zeichenfolge wörtlich, ohne so wie Variablen oder Escape-Zeichen ersetzt:

enter image description here

Was mache ich falsch?

Edit: Ich benutze iTerm2 auf einem Mac

+0

Haben Sie entweder eine neue Sitzung genommen oder die neue .profile-Datei geladen, so wie es aussah, hat es bei mir funktioniert. – RavinderSingh13

+0

Ja. Ich habe 'source ~/.profile' versucht. Ich habe sogar eine Testvariable über der Datei '.profile' deklariert und nach dem Sourcing wiederholt. Das hat funktioniert. Die Datei war also auf dem neuesten Stand. – Groschenroman

+0

Ich benutze übrigens iTerm2. Vielleicht ist das etwas relevant. – Groschenroman

Antwort

1

Sie können keine Escape-Sequenzen innerhalb hart Anführungszeichen erstellen ('string'), sind sie immer wörtlich interpretiert.

Verwenden Sie stattdessen doppelte Anführungszeichen ("string") oder versuchen Sie ansi-c quoting ($'string').

Sie können auch einfach vermeiden zu entkommen, wenn Sie sich entscheiden, mit harten Anführungszeichen zu bleiben.

+0

Dies scheint nur die Hälfte des Tricks zu tun. Ich ersetzte alle einzelnen durch Anführungszeichen und meine Bash-Eingabeaufforderung sieht immer noch so aus: '\ e [0; 36m \ u \ e [0; 35m $ (current_dir) \ e [0; 32m $ (parse_git_branch) \ [\ 033 [00m \] \ n $ ' Wenn ich' echo $ PS1' es zeigt: '$ (current_dir) $ (parse_git_branch) \ [\] $ \ e [0; 36m \ u \ e [0 ; 35m $ (current_dir) \ e [0; 32m $ (parse_git_branch) \ [\ 033 [00m \] \ n $ ' – Groschenroman

+0

sollte man auf jeden Fall das ansi-c zitieren dann zb '$ '\ 033 [9m''. Um die Formatierung von Ausgabezeichenfolgen zu erleichtern, sehen Sie sich den [styli.sh formatter] (https://github.com/eliranmal/styli.sh) an. Disclaimer: Ich habe es geschrieben –