Variable d'environnement HOSTNAME sous Linux

17

Sur ma machine Linux (Gentoo Linux 2.6.31 pour être spécifique), j'ai remarqué que la variable d'environnement HOSTNAME est disponible dans mon shell, mais pas dans les scripts. Par exemple,

$ echo $HOSTNAME

résultats

xxxxxxxx.com,

mais

$ ruby -e 'puts ENV["HOSTNAME"]'

résultats

nil

D'autre part, la variable d'environnement USER, par exemple, est disponible à la fois dans le shell et dans les scripts.

J'ai remarqué que USER apparaît dans la liste des variables d'environnement qui apparaît lorsque je tape

export

c'est à dire.,

declare -x USER="infogrind"

mais HOSTNAME ne le fait pas. Je soupçonne que le problème a quelque chose à voir avec cela.

Mes questions: 1) comment puis-je rendre HOSTNAME disponible dans les scripts, et 2) pour ma meilleure compréhension, où cette variable est-elle initialement définie et pourquoi n'est-elle pas "exportée"?


la source

Réponses:

16

$HOSTNAME est une variable Bash définie automatiquement (plutôt que dans un fichier de démarrage). Ruby court probablement sh pour sa coquille et il n'inclut pas cette variable. Il n'y a aucune raison pour que vous ne puissiez pas l'exporter vous-même.

bash$ echo $HOSTNAME
foobar
bash$ sh -c 'echo $HOSTNAME'

bash$ export HOSTNAME
bash$ sh -c 'echo $HOSTNAME'
foobar

Vous pouvez ajouter la commande d'exportation à l'un de vos fichiers de démarrage, tels que ~/.bashrc.

En Ruby (irb montré):

>> require 'socket'
=> true
>> Socket.gethostname
=> "bazinga"
Dennis Williamson
la source
2
Il est généralement préférable d'utiliser gethostname() à cause de ce.
grawity
2
Le standard posix énumère les variables d'environnement auxquelles vous pouvez vous attendre sur des systèmes compatibles posix. HOSTNAME n'est pas dans la liste: pubs.opengroup.org/onlinepubs/009695399/basedefs/…
qneill