zshでHOSTNAMEを設定する方法は?

zshでHOSTNAMEを設定する方法は?

Bash設定では、次のように$HOSTNAMEプロンプ​​ト行の全長を簡単に計算できます。 PS1_length=$((${#USER}+${#HOSTNAME}+${#PWDNAME}+12+${#PS1_GIT}))

たとえば、次のような塗りつぶし線を作成する場合に便利です。ここに画像の説明を入力してください。

しかし、zsh正しく設定できず、$HOSTNAME同様の動作をシミュレートする方法は思い出されません。どんなアイデアがありますか?

答え1

あなたは設定する必要があります

HOSTNAME=$(hostname)

あなたの~/.zshrc

または、Calebが指摘したように、変数HOST設定があるので、プロンプトを移植可能に保つには、次のようにすることもできます。

HOSTNAME=$HOST

答え2

zshプロンプト拡張を使用すると、計算を実行せずにプロンプ​​トを実行できます。

PS1='%$COLUMNS>╡>%F{cyan}╔╡%F{red}[%n]%F{cyan}:%F{yellow}[%m]%F{cyan}➾%F{green}[%~]%F{default}$PS1_GIT%F{cyan}${(l:COLUMNS::═:):-}%<<
╚═╡%F{default}'

説明する:

  • %$COLUMNS>╡>:次の前の部分に右が切り捨てられます($COLUMNS端末の幅に応じて動的に設定された変数)。zsh%<<
  • %F{color}:前景色の設定
  • %n、、%m%~ユーザー名、コンピュータ名(ホスト名の最初の点まで)、現在のディレクトリ(~-named-dirsを含む)。
  • ${(l:COLUMNS::═:):-}:空の文字列の左(${:-})を埋め、$COLUMNS文字の長さを埋めます

%mのように${HOST%%.*}。完全なホスト名($HOST)が必要な場合を使用してください%M

答え3

無効な変数名を使用しました。環境$HOSTNAME変数は通常、ホストシステムのinitルーチンによって設定されますが、必ずしもそうではありません。 ZSH構成ファイルのコンテキストでは、$HOSTシェルで明示的に設定した環境変数を使用する必要があります。からman zshall

シェルによって設定されたパラメータ
    […] ]
    HOST 現在のホスト名です。

ZSHはそのリストにそれを設定しようとしません$HOSTNAME

また$HOST、他のシェルへの移植性が必要な場合は、クロスプラットフォームのシェルスクリプトでこれを使用してはいけませんが(この場合、hostnameバイナリはおそらく最善の選択です)、ZSH設定ファイルの文脈でシェル独自の変数を使用することが最も重要です。

関連情報