Símbolo de Bash en Ubuntu: FQDN (\ H) igual que el nombre de host (\ h)

14

Tenemos entornos separados en mi lugar de trabajo para desarrollo, pruebas, integración y puesta en escena.

Dentro de esos entornos, hemos sobrecargado los nombres de host en DNS, por ejemplo, en el entorno de desarrollo, se llama a la máquina web principal web1.dev.example.comy, en el entorno de prueba, a la máquina web principal web1.test.example.com.

Para distinguir entre máquinas en los diferentes entornos, quiero personalizar las indicaciones de bash para mostrar el FQDN en lugar de solo el nombre de host. Bien y bueno; Debería poder reemplazar \hcon \Hin $PS1, ¿verdad? Hmm Muestran exactamente lo mismo.

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: ~$ 

En /etc/hostname, tengo solo el nombre de host ( web1). hostnamey hostname -fambos devuelven los resultados correctos ("web1" y "web1.test.example.com" respectivamente), y tengo las entradas correctas en /etc/hosts.

¿Lo que da?

Estos son hosts Ubuntu 10.04, si eso hace la diferencia.

Ben Williams
fuente

Respuestas:

18

Intente usar una llamada explícita a hostname -fpara obtener el fqdn del sistema

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

p.ej

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

EDITAR:

La investigación adicional muestra que los contenidos de /etc/hostname(Ubuntu) y /etc/sysconfig/network(CentOS) son relevantes. Si el FQDN está en el archivo, entonces \Hfunciona correctamente.

Sin embargo, la página de comando man hostname (1) para Ubuntu dice que no debe poner el FQDN en / etc / hostname, pero no da ninguna razón de por qué.

Iain
fuente
Eso es un poco feo :( Pero funciona. Podría dejar esto abierto un poco más, sería realmente bueno tener una solución "limpia".
Ben Williams
Esto parece estar relacionado con debian / ubuntu. Funciona como se esperaba en centos.
user9517
1
Sí, definitivamente es un problema de Ubuntu. Terminé usando la solución sugerida; Realmente debería informar esto como un error contra Bash en Ubuntu.
Ben Williams
@BenWilliams: respuesta actualizada con lo que debería hacerlo menos fugitivo.
user9517
También encontré esa misma ambigüedad en los documentos de configuración de nombre de host de Ubuntu. No estoy seguro de cómo resolverlo.
Dogweather
4

Hay una locura de locos por los nombres de host, cortos y largos, y hacerlo bien todo el tiempo es difícil , así que me doy por vencido y hago que todo use el FQDN como nombre de host ...

Hago lo mismo que usted en mis entornos, pero reduzco los FQDN en la solicitud porque sé en qué sitio estoy y ahorra espacio. También codifico por colores mi indicador en función del entorno, por lo que tengo una mejor advertencia de cuándo estoy haciendo algo en algún lugar "importante". También separo la ruta del espacio de todo lo demás, para facilitar la copia de pasta. Un fragmento de mi stock /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

Y, en lo que respecta a la "fealdad", ¿a quién le importa cómo se ve el código para mostrar el mensaje? De todos modos, es código de solo escritura la mayor parte del tiempo.

womble
fuente
1
+1 para el uso del color.
Saad Masood