如何在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由 shell 显式设置的环境变量。从man zshall

由 shell 设置的参数
    […]
    HOST 当前主机名。

请注意,在该列表中,$HOSTNAMEZSH 不会尝试设置它,它仅根据系统的 init 系统的突发奇想而设置或不设置。

另请注意,$HOST如果您希望可移植到其他 shell,则不应该在跨平台 shell 脚本中使用它(在这种情况下,hostname二进制文件可能是您的最佳选择),但在 ZSH 配置文件的上下文中,shell 自己的变量是最重要的合适的东西来使用。

相关内容