Variável de ambiente HOSTNAME no Linux

21

Na minha caixa Linux (Gentoo Linux 2.6.31, para ser específico), notei que a variável de ambiente HOSTNAME está disponível no meu shell, mas não nos scripts. Por exemplo,

$ echo $HOSTNAME

retorna

xxxxxxxx.com,

mas

$ ruby -e 'puts ENV["HOSTNAME"]'

retorna

nil

Por outro lado, a variável de ambiente USER, por exemplo, está disponível no shell e nos scripts.

Percebi que USER aparece na lista de variáveis ​​de ambiente que aparece quando digito

export

ou seja,

declare -x USER="infogrind"

mas HOSTNAME não. Suspeito que o problema tenha algo a ver com isso.

Minhas perguntas: 1) como disponibilizar HOSTNAME em scripts e 2) para meu melhor entendimento, onde essa variável é definida inicialmente e por que não é "exportada"?


fonte

Respostas:

21

$HOSTNAMEé uma variável do Bash definida automaticamente (e não em um arquivo de inicialização). O Ruby provavelmente roda shpara seu shell e não inclui essa variável. Não há motivo para não exportar você mesmo.

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

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

Você pode adicionar o comando de exportação a um dos seus arquivos de inicialização, como ~/.bashrc.

Em Ruby (irb mostrado):

>> require 'socket'
=> true
>> Socket.gethostname
=> "bazinga"
Pausado até novo aviso.
fonte
2
Geralmente é melhor usar gethostname()por causa disso.
usar o seguinte comando
3
O padrão POSIX enumera as variáveis de ambiente que você deve esperar em um sistemas POSIX-compliant, e HOSTNAME não está na lista: pubs.opengroup.org/onlinepubs/009695399/basedefs/...
qneill