Debian Linuxでは、ZSH%mプロンプトエスケープが正しく機能しません。

Debian Linuxでは、ZSH%mプロンプトエスケープが正しく機能しません。

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.

プロンプトにOSXを含めると、%2mOSXと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システムでデフォルトのホスト名を返しますか?

ドメイン名を含めるようにホスト名を変更してみることができます。 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$ "

関連情報