Invite Bash sur Ubuntu - FQDN (\ H) identique au nom d'hôte (\ h)

14

Nous avons des environnements séparés sur mon lieu de travail pour le développement, les tests, l'intégration et la mise en scène.

Dans ces environnements, nous avons surchargé les noms d'hôte dans DNS - par exemple, dans l'environnement de développement, la machine Web principale est appelée web1.dev.example.comet dans l'environnement de test, la machine Web principale l'est web1.test.example.com.

Pour distinguer les machines dans les différents environnements, je souhaite personnaliser les invites bash pour afficher le nom de domaine complet plutôt que simplement le nom d'hôte. Bel et bien; Je devrais pouvoir remplacer \hpar \Hin $PS1, non? Hmm. Ils montrent exactement la même chose.

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

Dans /etc/hostname, j'ai juste le nom d'hôte ( web1). hostnameet les hostname -fdeux renvoient les résultats corrects ("web1" et "web1.test.example.com" respectivement), et j'ai les entrées correctes dans /etc/hosts.

Ce qui donne?

Ce sont des hôtes Ubuntu 10.04, si cela fait une différence.

Ben Williams
la source

Réponses:

18

Essayez d'utiliser un appel explicite hostname -fpour obtenir le nom de domaine complet du système

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

par exemple

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

ÉDITER:

Des recherches plus poussées montrent que le contenu de /etc/hostname(Ubuntu) et /etc/sysconfig/network(CentOS) est pertinent. Si le nom de domaine complet est dans le fichier, cela \Hfonctionne correctement.

La page de manuel hostname (1) pour Ubuntu dit cependant que vous ne devriez pas mettre le FQDN dans / etc / hostname mais ne donne aucune raison pour laquelle.

Iain
la source
C'est un peu moche :( Mais ça marche. Je pourrais laisser cela ouvert un peu plus longtemps, ce serait vraiment bien d'avoir un correctif "propre".
Ben Williams
Cela semble être lié à debian / ubuntu. Cela fonctionne comme prévu dans les centos.
user9517
1
Oui, c'est définitivement un problème Ubuntu. J'ai fini par utiliser votre solution suggérée; Je devrais vraiment signaler cela comme un bug contre Bash dans Ubuntu.
Ben Williams
@BenWilliams: réponse mise à jour avec ce qui devrait la rendre moins fugace.
user9517
J'ai également trouvé cette même ambiguïté dans les documents de définition de nom d'hôte d'Ubuntu. Je ne sais pas comment le résoudre.
Dogweather
4

Il y a une folie folle à propos des noms d'hôte, courts et longs, et il est difficile de bien faire les choses tout le temps - alors j'abandonne et je fais tout utiliser le FQDN comme nom d'hôte ...

Je fais la même chose que vous dans mes environnements, mais je coupe les FQDN dans l'invite parce que je sais sur quel site je suis et cela économise de l'espace. J'ai également codé par couleur mon invite en fonction de l'environnement, donc j'ai un meilleur avertissement quand je fais quelque chose "important". Je sépare également le chemin de tout le reste, pour faciliter la copie des pâtes pwd. Un extrait de mon 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

Et, en ce qui concerne la "laideur", qui se soucie de ce à quoi ressemble le code pour afficher l'invite? C'est du code en écriture seule la plupart du temps, de toute façon.

womble
la source
1
+1 pour l'utilisation des couleurs.
Saad Masood