Variabile d'ambiente HOSTNAME su Linux


21

Sul mio box Linux (Gentoo Linux 2.6.31 per essere precisi) ho notato che la variabile d'ambiente HOSTNAME è disponibile nella mia shell, ma non negli script. Per esempio,

$ echo $HOSTNAME

ritorna

xxxxxxxx.com,

ma

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

ritorna

nil

D'altra parte, la variabile d'ambiente USER, ad esempio, è disponibile sia nella shell che negli script.

Ho notato che USER appare nell'elenco delle variabili di ambiente che appare quando digito

export

vale a dire,

declare -x USER="infogrind"

ma HOSTNAME no. Sospetto che il problema abbia qualcosa a che fare con questo.

Le mie domande: 1) come posso rendere HOSTNAME disponibile negli script e 2) per una migliore comprensione, dove viene inizialmente impostata questa variabile e perché non viene "esportata"?

Risposte:


21

$HOSTNAMEè una variabile Bash impostata automaticamente (anziché in un file di avvio). Ruby probabilmente funziona shper la sua shell e non include quella variabile. Non c'è motivo per cui non puoi esportarlo da solo.

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

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

È possibile aggiungere il comando export a uno dei file di avvio, ad esempio ~/.bashrc.

In Ruby (mostrato in irb):

>> require 'socket'
=> true
>> Socket.gethostname
=> "bazinga"

2
Di solito è meglio usare gethostname()per questo.
user1686

3
Lo standard posix enumera le variabili di ambiente che dovresti aspettarti su un sistema conforme a posix e HOSTNAME non è nell'elenco: pubs.opengroup.org/onlinepubs/009695399/basedefs/…
qneill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.