
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設定ファイルの文脈でシェル独自の変数を使用することが最も重要です。