Umgebungsvariable HOSTNAME unter Linux

21

Auf meiner Linux-Box (um genau zu sein Gentoo Linux 2.6.31) ist mir aufgefallen, dass die Umgebungsvariable HOSTNAME in meiner Shell verfügbar ist, jedoch nicht in Skripten. Beispielsweise,

$ echo $HOSTNAME

kehrt zurück

xxxxxxxx.com,

aber

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

kehrt zurück

nil

Andererseits ist die Umgebungsvariable USER beispielsweise sowohl in der Shell als auch in Skripten verfügbar.

Ich habe festgestellt, dass USER in der Liste der Umgebungsvariablen angezeigt wird, die bei der Eingabe angezeigt wird

export

dh

declare -x USER="infogrind"

aber HOSTNAME nicht. Ich vermute, dass das Problem damit zu tun hat.

Meine Fragen: 1) Wie kann ich HOSTNAME in Skripten verfügbar machen und 2) zum besseren Verständnis, wo ist diese Variable ursprünglich festgelegt und warum wird sie nicht "exportiert"?


quelle

Antworten:

21

$HOSTNAMEist eine Bash-Variable, die automatisch festgelegt wird (und nicht in einer Startdatei). Ruby läuft wahrscheinlich shfür seine Shell und enthält diese Variable nicht. Es gibt keinen Grund, warum Sie es nicht selbst exportieren können.

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

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

Sie können den Befehl export zu einer Ihrer Startdateien hinzufügen, z ~/.bashrc.

In Ruby (irb gezeigt):

>> require 'socket'
=> true
>> Socket.gethostname
=> "bazinga"
Bis auf weiteres angehalten.
quelle
2
Es ist in der Regel besser, gethostname()aus diesem Grund zu verwenden .
Grawity
3
Der posix-Standard listet die Umgebungsvariablen auf, die Sie auf posix-kompatiblen Systemen erwarten sollten, und HOSTNAME ist nicht in der Liste enthalten: pubs.opengroup.org/onlinepubs/009695399/basedefs/…
qneill