На моем поле Linux (хинду Linux 2.6.31, чтобы быть конкретным) я заметил, что переменная среды ИМЕНИ ХОСТА доступна в моей оболочке, но не в сценариях. Например,
$ echo $HOSTNAME
возвраты
xxxxxxxx.com,
но
$ ruby -e 'puts ENV["HOSTNAME"]'
возвраты
nil
С другой стороны, переменная Пользовательской среды, например, доступна и в оболочке и в сценариях.
Я заметил, что ПОЛЬЗОВАТЕЛЬ появляется в списке переменных среды, который появляется, когда я ввожу
export
т.е.
declare -x USER="infogrind"
но ИМЯ ХОСТА не делает. Я подозреваю, что проблема имеет некоторое отношение к этому.
Мои вопросы: 1) как может я делать ИМЯ ХОСТА доступным в сценариях и 2) для моего лучшего понимания, где это является переменным первоначально набор, и почему это не "экспортируется"?
$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"