Zsh

zsh 中的 PS1 變數未發生命令替換

  • April 6, 2020

我很難在 Ubuntu 17.10 上使用zshPS1在提示符中獲取動態評估的命令輸出。這是我所做的一些嘗試(我從 directory 開始,提示以粗體顯示):/abc

**$** export PS1="$(pwd) > "
**/abc >** cd /def
**/abc >** pwd
/定義
**/abc >**導出 PS1="\$(pwd) > "
**$(pwd) >**導出 PS1='$(pwd) > '
**$(pwd) >**導出 PS1='\$(pwd) > '
**\$(pwd) >**  *[怒退]*

第一個結果是最接近的,但是當我定義變數時,該命令似乎pwd只被評估一次。PS1顯然有些東西我不明白。$(<cmd>)每次顯示命令提示符時,我該怎麼做才能重新評估?

要讓zshshell 對 的值執行命令替換PS1,請設置PROMPT_SUBSTshell 選項:

set -o PROMPT_SUBST
PS1='$(pwd) > '

export請注意,不需要PS1變數。

之所以PROMPT_SUBST預設不設置 shell 選項,可能是因為zshshell 已經有豐富的語法來進行提示擴展。

例如,您的範例可以替換為

PS1='%/ > '

有關這方面的更多資訊,請參閱zshmisc系統手冊中的“擴展提示序列”部分。


當你使用

PS1="$(pwd) > "

PS1在賦值發生之前,賦予變數的值被擴展。這就是為什麼當你改變目錄時它不會改變。

引用自:https://unix.stackexchange.com/questions/434692