ZSH %m prompt escape não funciona conforme documentado no Debian Linux

ZSH %m prompt escape não funciona conforme documentado no Debian Linux

A zshmiscpágina de manual da minha nova instalação do Debian Squeeze afirma, em SIMPLE PROMPT ESCAPES:

%m
The hostname up to the first `.'. An integer may follow the '%' to specify how
many components of the hostname are desired. With a negative integer, trailing
components of the hostname are shown.

Quando incluo %2mmeu prompt, vejo um comportamento diferente entre OSX e Linux.

No OSX (10.7.3), executando o zsh 4.3.11, o prompt se comporta conforme o esperado, mostrando os dois componentes principais do nome do host do sistema.

No Debian, executando o zsh 4.3.10, o prompt ainda mostra apenas o nome do host. hostname -fneste sistema confirma que o nome completo do host está definido corretamente. Observe também que a página de manual desta versão zsh diz que %2m deve ser suportado.

Alguém tem alguma sugestão sobre onde começar a depurar isso?

Responder1

Uma rápida olhada no zshcódigo-fonte de manipulação imediatasugere que isso %mse baseia no que seu sistema retorna para a gethostnamechamada do sistema. É como correr hostnamesem -fopção.

Estou assumindo que está correndohostname sem -fretorna seu nome de host simples em seu sistema Debian?

Você pode tentar alterar seu nome de host para incluir o nome de domínio. O DebianDocumentos Como fazer/Alterar nome do hostdeveria ajudar com isso. Mas talvez algumas ferramentas Debian assumam que seu nome de host não inclui o nome de domínio, então isso pode ser uma má ideia.

Pode fazer mais sentido usar apenas a substituição de comandos.

Primeiro defina a opção PROMPT_SUBST

setopt PROMPT_SUBST

então você pode executar qualquer comando e colocar sua saída no prompt assim:

PS1='$(hostname -f)$ '

para obter apenas as primeiras partes do nome do host, você pode usarcut, por exemplo

PS1='$(hostname -f | cut -f 1-2 -d .)$ '

Como o seu nome de host não deve mudar, você também pode ser um pouco mais eficiente executando o comando apenas uma vez e armazenando-o em uma variável e depois usando a variável, por exemplo

HOSTANDSUBDOMAIN="$(hostname -f | cut -f 1-2 -d .)"
PS1="$HOSTANDSUBDOMAIN$ "

informação relacionada