18

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

1 ответ1

17

$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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .