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

2

A página zshmisc man nos meus novos estados de instalação do Squeeze, sob 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 %2m no meu prompt, vejo um comportamento diferente entre o OSX e o Linux.

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

No Debian, rodando o zsh 4.3.10, o prompt ainda mostra apenas o nome do host. hostname -f neste sistema confirma que o nome completo do host está configurado corretamente. Note também que o manpage para este lançamento zsh diz que% 2m deve ser suportado.

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

    
por Murali Suriar 30.03.2012 / 03:00

1 resposta

6

Uma rápida olhada nos código fonte de tratamento antecipado sugere que %m é baseado no que seu sistema retorna para a chamada de sistema gethostname . É como executar hostname sem a opção -f .

Eu estou supondo que correr hostname sem -f retorne seu hostname no sistema Debian?

Você pode tentar alterar seu nome de host para incluir o nome de domínio. Os documentos HowTo / ChangeHostname do Debian devem ajudar com isso. Mas talvez algumas ferramentas do Debian assumam que seu nome de host não inclui o nome de domínio, então isso pode ser uma má idéia.

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 usar cut , por exemplo

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

Como 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, em seguida, usando a variável, por exemplo

HOSTANDSUBDOMAIN="$(hostname -f | cut -f 1-2 -d .)"
PS1="$HOSTANDSUBDOMAIN$ "
    
por 30.03.2012 / 07:29