Bash prompt no Ubuntu - FQDN (\ H) igual ao hostname (\ h)

11

Temos ambientes separados no meu local de trabalho para desenvolvimento, teste, integração e organização.

Nesses envs, sobrecarregamos os nomes de host no DNS - por exemplo, no ambiente de desenvolvimento, a máquina da Web principal é chamada de web1.dev.example.com e, no ambiente de teste, a máquina da Web principal é web1.test.example.com .

Para distinguir entre máquinas nos diferentes ambientes, quero personalizar os prompts do bash para exibir o FQDN em vez de apenas o nome do host. Bem e bom; Eu deveria poder substituir \h por \H em $PS1 , certo? Hmm. Eles mostram exatamente a mesma coisa.

me@web1:~$ hostname
web1
me@web1:~$ hostname -f
web1.dev.example.com
me@web1:~$ export PS1="\[\u@\h: \w\]\$ "
me@web1: ~$ export PS1="\[\u@\H: \w\]\$ "
me@web1: ~$ 

Em /etc/hostname , tenho apenas o nome do host ( web1 ). hostname e hostname -f retornam os resultados corretos ("web1" e "web1.test.example.com" respectivamente), e eu tenho as entradas corretas em /etc/hosts .

O que dá?

Estes são hosts do Ubuntu 10.04, se isso fizer diferença.

    
por Ben Williams 03.08.2011 / 08:46

3 respostas

16

Tente usar uma chamada explícita para hostname -f para obter o fqdn do sistema

export PS1="\[\u@$(hostname -f): \w\]\$ "

por exemplo.

iain$ export PS1="\[\u@$(hostname -f): \w\]\$ "
[email protected]: ~$ 

EDITAR:

Mais pesquisas mostram que o conteúdo de /etc/hostname (Ubuntu) e /etc/sysconfig/network (CentOS) são relevantes. Se o FQDN estiver no arquivo, o \H funcionará corretamente.

A página do manual hostname (1) para o Ubuntu, no entanto, diz que você não deve colocar o FQDN em / etc / hostname, mas não dá nenhuma razão para isso.

    
por 04.08.2011 / 11:16
3

Existe uma loucura insana de nomes de hosts, curtos e longos, e acertar o tempo todo é difícil - então eu desisto e faço tudo usar o FQDN como hostname. ..

Eu faço o mesmo que você em meus ambientes, mas eu desmereço os FQDNs no prompt porque conheço em qual site estou e economiza espaço. Eu também codifico cor meu prompt baseado no ambiente, então eu tenho um aviso melhor de quando estou fazendo algo em algum lugar "importante". Eu também separo o caminho de todo o resto, para tornar mais fácil copiar o pwd. Um snippet do meu estoque /etc/profile :

if hostname -f | grep -q '\.stg\.example\.com'; then
  _ROOT_COLOR=33  # yellow
  _USER_COLOR=36  # cyan
else
  _ROOT_COLOR=31  # red
  _USER_COLOR=32  # green
fi

if [ "'id -u'" -eq 0 ]; then
  PS1="\[3[01;${_ROOT_COLOR}m\]$(hostname -f|sed 's/\.example\.com//')\[3[01;34m\] \w #\[3[00m\] "
else
  PS1="\[3[01;${_USER_COLOR}m\]\u@$(hostname -f|sed 's/\.example\.com//')\[3[01;34m\] \w $\[3[00m\] "
fi

E, no que diz respeito à "fealdade", quem se importa com a aparência do código para exibir o prompt? É um código somente de escrita na maioria das vezes, de qualquer forma.

    
por 03.08.2011 / 09:51
0

Esse é um bug de como o Ubuntu gerencia o / etc / hostname.

Arquivado um bug: link

    
por 05.02.2014 / 21:30