Змінна середовища 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()через це.
користувач1686

3
Стандарт posix перераховує змінні середовища, яких слід очікувати в системах, сумісних з posix, і HOSTNAME відсутній у списку: pubs.opengroup.org/onlinepubs/009695399/basedefs/…
qneill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.