Переменная среды HOSTNAME в Linux

21

На моем компьютере с 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) для моего лучшего понимания, где изначально установлена ​​эта переменная, и почему она не "экспортируется"?


источник

Ответы:

21

$HOSTNAMEпеременная Bash, которая устанавливается автоматически (а не в файле запуска). Ruby, вероятно, работает shдля своей оболочки и не включает эту переменную. Там нет причин, вы не можете экспортировать его самостоятельно.

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

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

Вы можете добавить команду экспорта в один из ваших файлов запуска, например ~/.bashrc.

В Ruby (показан irb):

>> require 'socket'
=> true
>> Socket.gethostname
=> "bazinga"
Приостановлено до дальнейшего уведомления.
источник
2
Обычно лучше использовать gethostname()из-за этого.
user1686
3
Стандарт posix перечисляет переменные окружения, которые вы должны ожидать в posix-совместимых системах, и HOSTNAME отсутствует в списке: pubs.opengroup.org/onlinepubs/009695399/basedefs/…
qneill