2017-08-12 101 views
1

.profile我的bash提示符變量是這樣的:Bash提示符不會轉換轉義字符

# $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\$ " 

所以我的bash提示符實際上應該顯示我的用戶名,當前目錄中的git分支(如果有的話),並然後在新行中輸入$(就像上面評論的那樣)。 但相反,它顯示了字符串字面,而無需更換變量或轉義字符,像這樣:

enter image description here

我在做什麼錯?

編輯:我用iTerm2在Mac

+0

你是不是採取新的會議或加載新的.profile,因爲它看起來它爲我工作。 – RavinderSingh13

+0

是的。我嘗試過'source〜/ .profile'。 我甚至在'.profile'文件的頂部聲明瞭一個測試變量,並在採購後對其進行回顯。這工作。所以這個文件是最新的。 – Groschenroman

+0

我正在使用iTerm2。也許這有點相關。 – Groschenroman

回答

1

不能創建內部硬引號('string')轉義序列,他們總是從字面上解釋。

改爲使用雙引號("string"),或嘗試ansi-c quoting$'string')。

如果您選擇堅持使用強硬引號,您也可以簡單地避免首先逃脫。

+0

這似乎只做了一半的把戲。我用雙引號替換了所有的單引號,並且我的bash提示符仍然如下所示: '\ e [0; 36m \ u \ e [0; 35m $(current_dir)\ e [0; 32m $(parse_git_branch)\ [\ 033 [00米\] \ n上$' 如果我'回波$ PS1'它表明: '$(current_dir)$(parse_git_branch)\ [\] $ \ E [0;36米\ U \ E [0 ; 35m $(current_dir)\ e [0; 32m $(parse_git_branch)\ [\ 033 [00m \] \ n $' – Groschenroman

+0

您應該明確地使用ansi-c引用,例如'$'\ 033 [9m''。爲了使格式化輸出字符串更容易,請查看[styli.sh格式器](https://github.com/eliranmal/styli.sh)。免責聲明:我寫了 –