私の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)理解を深めるために、この変数は最初にどこに設定され、なぜ「エクスポート」されないのですか?
$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"