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 を実行すると、プロンプトは期待どおりに動作し、システム ホスト名の先頭の 2 つのコンポーネントが表示されます。

Debian では、zsh 4.3.10 を実行しても、プロンプトには依然としてホスト名のみが表示されます。hostname -fこのシステムでは、完全なホスト名が正しく設定されていることを確認します。また、この zsh リリースのマニュアル ページには、%2m がサポートされるはずであると記載されていることにも注意してください。

これをデバッグするにはどこから始めればよいか、何か提案はありますか?

答え1

zshの簡単な概要プロンプト処理ソースコード%mシステムがシステム コールに対して返す内容に基づいていることを示唆しています。これは、オプションなしでgethostname実行するのと同じです。hostname-f

走っていると思いますhostname それなし -fDebian システムで裸のホスト名を返しますか?

ホスト名をドメイン名を含むように変更してみてください。DebianHowTo/ホスト名の変更ドキュメント役に立つはずです。ただし、一部の 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$ "

関連情報