在为您设置的 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
由 shell 显式设置的环境变量。从man zshall
:
由 shell 设置的参数
[…]
HOST 当前主机名。
请注意,在该列表中,$HOSTNAME
ZSH 不会尝试设置它,它仅根据系统的 init 系统的突发奇想而设置或不设置。
另请注意,$HOST
如果您希望可移植到其他 shell,则不应该在跨平台 shell 脚本中使用它(在这种情况下,hostname
二进制文件可能是您的最佳选择),但在 ZSH 配置文件的上下文中,shell 自己的变量是最重要的合适的东西来使用。