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.
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.
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.
C'est un bug avec comment Ubuntu gère/etc/hostname.
Bug déposé: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1276796