Prompt Bash no Ubuntu - FQDN (\ H) igual ao nome do host (\ h)

14

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

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

Para distinguir entre máquinas nos diferentes ambientes, desejo personalizar os prompts do bash para exibir o FQDN em vez de apenas o nome do host. Bem e bom; Eu deveria ser capaz de substituir \hcom \Hem $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, eu tenho apenas o hostname ( web1). hostnamee hostname -fambos retornam os resultados corretos ("web1" e "web1.test.example.com", respectivamente), e eu tenho as entradas corretas em /etc/hosts.

O que da?

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

Ben Williams
fonte

Respostas:

18

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

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

por exemplo

iain$ export PS1="\[\u@$(hostname -f): \w\]\$ "
iain@ub10-04-1.lan: ~$ 

EDITAR:

Pesquisas adicionais mostram que o conteúdo do /etc/hostname(Ubuntu) e /etc/sysconfig/network(CentOS) é relevante. Se o FQDN estiver no arquivo, ele \Hfuncionará corretamente.

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

Iain
fonte
Isso é meio feio :( Mas ela não funciona eu poderia deixar esta aberto para um pouco mais, que seria muito bom ter uma correção "limpa"..
Ben Williams
Isso parece estar relacionado ao debian / ubuntu. Funciona como esperado em centos.
precisa saber é o seguinte
1
Sim, é definitivamente um problema do Ubuntu. Acabei usando sua solução sugerida; Eu realmente deveria relatar isso como um bug contra o Bash no Ubuntu.
Ben Williams
@ Ben Williams: resposta atualizada com o que deve torná-lo menos fugaz.
user9517
Eu também encontrei essa mesma ambiguidade nos documentos de configuração de nome de host do Ubuntu. Não sei como resolvê-lo.
8113 Dogweather
4

Existe uma quantidade insana de loucura sobre nomes de host, curtos e longos, e fazer o certo o tempo todo é difícil - então eu desisto e faço tudo usar o FQDN como o nome do host ...

Faço o mesmo que você em meus ambientes, mas corro os FQDNs no prompt porque sei em que site estou e economiza espaço. Também codifico meu prompt de cores com base no ambiente, para que eu receba um aviso melhor de quando estou fazendo algo em algum lugar "importante". Também separo o caminho do espaço de todo o resto, para facilitar a cópia de pastas de pasta. Um trecho 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="\[\033[01;${_ROOT_COLOR}m\]$(hostname -f|sed 's/\.example\.com//')\[\033[01;34m\] \w #\[\033[00m\] "
else
  PS1="\[\033[01;${_USER_COLOR}m\]\u@$(hostname -f|sed 's/\.example\.com//')\[\033[01;34m\] \w $\[\033[00m\] "
fi

E, no que diz respeito à "feiúra", quem se importa com a aparência do código para exibir o prompt? De qualquer maneira, é um código somente de gravação.

mulher
fonte
1
+1 para o uso da cor.
precisa saber é o seguinte