如何在 zsh 中设置 HOSTNAME?

who*_*ver 6 shell zsh environment-variables

$HOSTNAME为您设置的 Bash 中,我只需使用以下内容即可计算提示行的总长度: PS1_length=$((${#USER}+${#HOSTNAME}+${#PWDNAME}+12+${#PS1_GIT}))

这很有用,例如在创建这样的填充线时: 在此处输入图片说明

但是zsh无法$HOSTNAME正确设置,我想不出一种方法来模拟其中的类似行为 - 有什么想法吗?

Sté*_*las 9

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}'
Run Code Online (Sandbox Code Playgroud)

解释:

  • %$COLUMNS>?>: 右截断到$COLUMNS(由zsh终端宽度动态设置的变量)直到下一个%<<.
  • %F{color}: 设置前景色
  • %n, %m, %~: 用户名、机器名(主机名到第一个点)、当前目录和~-named-dirs。
  • ${(l:COLUMNS::?:):-}:用字符左填充空字符串 ( ${:-}) 到$COLUMNS长度?

%m就像${HOST%%.*}. 如果您需要完整的主机名 ( $HOST),请%M改用。


Ant*_*hon 5

你应该只设置

HOSTNAME=$(hostname)
Run Code Online (Sandbox Code Playgroud)

在你的 ~/.zshrc

或者正如 Caleb 指出的那样,有一个变量 HOST 集,因此为了保持提示可移植,您还可以执行以下操作:

HOSTNAME=$HOST
Run Code Online (Sandbox Code Playgroud)

  • @Anthon Prompt 在 bash 和 zsh 中的转义是完全不同的,所以在那里寻找兼容性是没有意义的。 (2认同)