ZSH %m 提示轉義在 Debian Linux 下無法正常運作

ZSH %m 提示轉義在 Debian Linux 下無法正常運作

zshmisc我的新 Debian Squeeze 安裝的手冊頁如下SIMPLE PROMPT ESCAPES

%m
The hostname up to the first `.'. An integer may follow the '%' to specify how
many components of the hostname are desired. With a negative integer, trailing
components of the hostname are shown.

當我將其包含%2m在提示符中時,我發現 OSX 和 Linux 之間存在不同的行為。

在 OSX (10.7.3) 上,執行 zsh 4.3.11,提示符的行為符合預期,顯示系統主機名稱的兩個主要部分。

在 Debian 上,執行 zsh 4.3.10,提示符號仍然只顯示裸主機名稱。hostname -f在此系統上確認完整主機名稱設定正確。另請注意,此 zsh 版本的線上說明頁表示應支援 %2m。

有人對從哪裡開始調試有什麼建議嗎?

答案1

快速瀏覽一下 zsh提示處理原始碼建議這%m基於您的系統為gethostname系統呼叫返回的內容。這就像在hostname沒有-f選擇的情況下跑步一樣。

我假設正在跑步hostname 沒有 -f傳回 Debian 系統上的裸主機名稱?

您可以嘗試變更主機名稱以包含網域名稱。 Debian如何/更改主機名稱文檔應該對此有所幫助。但也許某些 Debian 工具會假設您的主機名稱不包含域名,因此這可能是個壞主意。

僅使用命令替換可能更有意義。

首先設定PROMPT_SUBST選項

setopt PROMPT_SUBST

然後您可以運行任何命令並將其輸出放入提示符中,如下所示:

PS1='$(hostname -f)$ '

要僅取得主機名稱的前幾個部分,您可以使用cut,例如

PS1='$(hostname -f | cut -f 1-2 -d .)$ '

因為您的主機名稱不應該更改,所以您也可以透過僅執行命令一次並將其儲存在變數中,然後使用該變數來提高效率,例如

HOSTANDSUBDOMAIN="$(hostname -f | cut -f 1-2 -d .)"
PS1="$HOSTANDSUBDOMAIN$ "

相關內容