Como definir o HOSTNAME no zsh?

4

Em bash , que define $ HOSTNAME para você, consegui calcular o comprimento total da linha de prompt simplesmente usando algo como: PS1_length=$((${#USER}+${#HOSTNAME}+${#PWDNAME}+12+${#PS1_GIT}))

Foi útil, e. ao criar a linha de preenchimento assim:

No entanto, zsh não consegue definir $HOSTNAME corretamente e não consigo pensar em uma maneira de imitar o comportamento semelhante - quaisquer pensamentos?

    
por whoever 13.06.2015 / 10:10

3 respostas

3

Você deve definir apenas

HOSTNAME=$(hostname)

no seu ~/.zshrc

Ou, como Caleb apontou, há um conjunto de HOST variável, portanto, para manter seu prompt portátil, você também pode fazer:

HOSTNAME=$HOST
    
por 13.06.2015 / 10:42
7
A expansão de prompt

zsh permite que você faça esse aviso sem precisar fazer nenhum cálculo:

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}'

Explicado:

  • %$COLUMNS>╡> : truncar à direita para $COLUMNS (uma variável definida dinamicamente por zsh para a largura do terminal) a parte até o próximo %<< .
  • %F{color} : defina a cor do primeiro plano
  • %n , %m , %~ : nome do usuário, nome da máquina (nome do host até o primeiro ponto), diretório atual com ~ -named-dirs.
  • ${(l:COLUMNS::═:):-} : preenche a string vazia ( ${:-} ) com $COLUMNS length com caracteres.

%m é como ${HOST%%.*} . Se você quiser o nome completo do host ( $HOST ), use %M .

    
por 13.06.2015 / 22:05
3

Você está usando o nome da variável errada. A variável de ambiente $HOSTNAME é geralmente definida pelas rotinas init do sistema host, mas nem sempre. No contexto de um perfil ZSH, você deve usar a variável de ambiente $HOST , que é explicitamente definida pelo shell. De man zshall :

PARAMETERS SET BY THE SHELL
    […]
    HOST The current hostname.

Note nessa lista que $HOSTNAME não é algo que o ZSH tenta definir, é apenas definido ou não no capricho do sistema init do seu sistema.

Observe também que $HOST não é algo que você deve usar em scripts shell de plataforma cruzada se estiver esperando portabilidade para outros shells - nesse caso, o hostname binário é provavelmente sua melhor aposta - mas no contexto de um O perfil do ZSH é a variável mais apropriada para usar.

    
por 13.06.2015 / 11:46