web-dev-qa-db-ja.com

LinuxのHOSTNAME環境変数

私のLinuxボックス(具体的にはGentoo Linux 2.6.31)で、HOSTNAME環境変数がシェルでは使用できるが、スクリプトでは使用できないことに気付きました。例えば、

$ echo $HOSTNAME

戻り値

xxxxxxxx.com,

だが

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

戻り値

nil

一方、USER環境変数は、たとえば、シェルとスクリプトの両方で使用できます。

入力したときに表示される環境変数のリストにUSERが表示されることに気づきました

export

つまり、

declare -x USER="infogrind"

しかしHOSTNAMEはしません。私は問題がそれに関係していると思います。

私の質問:1)スクリプトでHOSTNAMEを使用できるようにする方法、および2)理解を深めるために、この変数は最初にどこに設定され、なぜ「エクスポート」されないのですか?

22
user34614

$HOSTNAMEは、(スタートアップファイルではなく)自動的に設定されるBash変数です。 Rubyおそらくそのシェルに対してshを実行し、その変数は含まれていません。自分でエクスポートできない理由はありません。

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

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

~/.bashrcなどのスタートアップファイルの1つにエクスポートコマンドを追加できます。

Ruby(irbを表示):

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