Zmienna środowiskowa HOSTNAME w systemie Linux

21

Na moim Linux-ie (konkretnie Gentoo Linux 2.6.31) zauważyłem, że zmienna środowiskowa HOSTNAME jest dostępna w mojej powłoce, ale nie w skryptach. Na przykład,

$ echo $HOSTNAME

zwroty

xxxxxxxx.com,

ale

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

zwroty

nil

Z drugiej strony, na przykład zmienna środowiskowa USER jest dostępna zarówno w powłoce, jak iw skryptach.

Zauważyłem, że USER pojawia się na liście zmiennych środowiskowych, które pojawiają się podczas pisania

export

to znaczy,

declare -x USER="infogrind"

ale HOSTNAME nie. Podejrzewam, że problem ma z tym coś wspólnego.

Moje pytania: 1) jak mogę udostępnić HOSTNAME w skryptach oraz 2) dla lepszego zrozumienia, gdzie ta zmienna jest początkowo ustawiona i dlaczego nie jest „eksportowana”?


źródło

Odpowiedzi:

21

$HOSTNAMEto zmienna Bash, która jest ustawiana automatycznie (zamiast w pliku startowym). Ruby prawdopodobnie działa shdla swojej powłoki i nie zawiera tej zmiennej. Nie ma powodu, dla którego nie możesz sam go wyeksportować.

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

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

Możesz dodać polecenie eksportu do jednego z plików startowych, takiego jak ~/.bashrc.

W Ruby (pokazano irb):

>> require 'socket'
=> true
>> Socket.gethostname
=> "bazinga"
Wstrzymano do odwołania.
źródło
2
Z gethostname()tego powodu zwykle lepiej jest go używać .
user1686
3
Standard posix wylicza zmienne środowiskowe, których należy się spodziewać w systemach zgodnych z posix, a NAZWA
HOSTA