web-dev-qa-db-fra.com

Invite Bash sur Ubuntu - FQDN (\ h) identique à celle de l'hôte (\ h)

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 ENV, nous avons surchargé les noms d'hôte dans DNS - E.G. Dans l'environnement de développement, la machine Web principale s'appelle web1.dev.example.com, et dans l'environnement de test, la machine Web principale est web1.test.example.com.

Pour distinguer les machines dans les différents environnements, je souhaite personnaliser les invites Bash pour afficher le FQDN plutôt que simplement le nom d'hôte. Bel et bien; Je devrais être capable de remplacer \h avec \H dans $PS1, droit? 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). hostname et hostname -f Les deux 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.

15
Ben Williams

Essayez d'utiliser un appel explicite à hostname -f Pour obtenir le FQDN du système

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

par exemple.

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

ÉDITER:

D'autres recherches montrent que le contenu de /etc/hostname (Ubuntu) et /etc/sysconfig/network (Centos) sont pertinents. Si le FQDN est dans le fichier, alors le \H fonctionne correctement.

La page Nom d'hôte (1) Homme pour Ubuntu dit que vous ne devriez pas mettre le FQDN dans/etc/hostname mais ne donne aucune raison de pourquoi.

20
user9517

Il y a une quantité insensée de folie sur les noms d'hôte, courts et longs, et l'obtenir tout de temps tout le temps est dur - Donc, je viens d'abandonner et de tout faire utiliser le FQDN comme nom d'hôte ...

Je fais la même chose que vous dans mes environnements, mais je frappe les FQDNS dans l'invite parce que je savez Quel site je suis sur, et cela permet d'économiser de l'espace. Je code aussi colorant mon invite basé sur l'environnement, donc j'ai un meilleur avertissement de quand je fais quelque chose quelque part quelque part "important". J'espace également de séparer le chemin de tout le reste, pour faciliter la copie-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 jusqu'à la "laideur" va, qui se soucie de ce que le code pour afficher l'invite ressemble? C'est un code en écriture la plupart du temps, de toute façon.

4
womble

C'est un bug avec comment Ubuntu gère/etc/hostname.

Bug déposé: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1276796

0
Rodney