2013-04-16 30 views
1

注意:不要爲該示例提供更簡單的解決方案,它僅生成以顯示問題,訂單取自真實的​​。bash爲PS1解析文字值中的變量

我試圖改變我的PS1在「.bashrc中」,不想在這裏打全碼(但需要存儲的文字模板中定義它的內部變量之前),問題總結到:

PROMPT_START='$PathShort' 
PathShort="\w" 
PS1="$PROMPT_START$" 

結果我有:

\w$ 

但我相信:

~/java/git/shell$ 

但如果讓PS1,如:

PS1="\w$" 

結果不如預期:

~/java/git/shell$ 

通過推遲變量($ PathShort)我(第一)變種解決如何讓PS1?

注意:我不能改變的變量的順序,這個問題是這樣​​

+1

後'$ PathShort'擴大到'\ w'的bash不會擴大再次產生'\ w'。 – pynexj

+0

我可以評估文字字符串中的變量,以定義將包含'\ w'的變量,並且PS1將只執行'\ w'的一步擴展爲精確值? –

+0

我不太明白你真正的問題,但你可以使用'PROMPT_COMMAND'來做你想要的任何事情。這是[一個簡單的例子](http://stackoverflow.com/a/15673542/900078)我寫了。 – pynexj

回答

0

它不是明確的結果,你想在PS1 \w$?然後使用PS1="\\\w$"。當bash讀取字符串時,它讀取\作爲轉義字符。所以你需要通過在其之前放置另一個轉義字符來提供文字\。閱讀,它的樂趣:) http://en.wikipedia.org/wiki/Leaning_toothpick_syndrome

+0

感謝您指出問題,我更新了問題 - 我需要提示路徑。 –

+0

okkk ,,你可以檢查這個不錯的鏈接:) http://www.thegeekstuff.com/2008/09/bash-shell-ps1-10-examples-to-make-your-linux-prompt-like-angelina- jolie /將會有更多的修改可能,只需將它扔到谷歌和谷歌將提出任何你想要的 – abasu

+0

在你的例子的前3行,你可以嘗試回顯$ PS1後,你已經執行它們?那麼你會看到究竟是什麼被設置爲PS1。然後用'''替換'''然後再看看發生了什麼..不要忘了告訴我們 – abasu

0

.profile文件:

function prompt() { 
    print $PathShort 
} 
export -f prompt 
PS1='`prompt`$ ' 

結果:

alevin $ . .profile 
$ export PathShort=one 
one$ export PathShort=two 
two$ export PathShort=three 
three$ 
+0

我需要解析存儲其他變量的變量(在編譯PathShort後再次評估PROMPT_START),在你的答案中你只需要做PS1 ='$ PathShort $' –