Por que alguns scripts usam exportação para variáveis do sistema? [duplicado]

2

Eu vejo muitos tutoriais on-line para o Ubuntu, e alguns deles estão usando export = no início do script para variáveis do sistema.

por exemplo:

export JAVA_HOME=/usr/local/java/jdk1.8.0_05
export CATALINA_HOME=/ubuntuland/utils/apache-tomcat-8.0.8

Veja este tutorial

Estou tentando entender a lógica - pois faz sentido para mim que eles usem as variáveis do sistema e não definam as suas próprias.

EDITAR

quando escrevo: echo $JAVA_HOME no shell Eu vejo o conteúdo correto, em qualquer shell, a qualquer momento do servidor (mesmo após a reinicialização)

    
por Dejel 28.02.2016 / 16:51

2 respostas

2

Às vezes você tem dependências da versão a ser usada para executar algo. No seu caso, isso seria uma versão do Java para alimentar seu servidor Tomcat. A versão global do Java pode mudar ao longo do tempo e fazer o seu servidor Tomcat travar devido a erros ou incompatibilidades. Então, se você definir o seu próprio JAVA_HOME , você pode ter certeza de que o seu Tomcat começa com uma versão Java que você testou anteriormente e você pode confiar. Outro ponto pode ser que você tenha várias instâncias em execução e precise especificar um CATALINA_HOME diferente para as instâncias diferentes.

Eu acho que é mesmo uma boa prática definir as variáveis explícitas em vez de confiar em variáveis que podem mudar com o tempo ou até mesmo não existir, dependendo da configuração do sistema. Isso também facilita a solução de problemas e a visualização dos caminhos e binários usados.

    
por 28.02.2016 / 17:04
1

O manual bash tem isto a dizer sobre export :

export [-fn] [name[=word]] ...
export -p
        The  supplied names are marked for automatic export to the envi‐
        ronment of subsequently executed commands. [...]

O que isto significa é que quando uma variável é exportada, ela será disponibilizada para qualquer processo filho do shell que a exportou. Para ilustrar:

$ foo="bar"              
$ bash -c 'echo "$foo"'  ## the variable isn't available to the child

$ export foo="bar"
$ bash -c 'echo "$foo"' ## the child also gets the variable
bar

Portanto, use export quando quiser disponibilizar uma variável para todos os processos e não apenas para o shell atualmente em execução.

    
por 28.02.2016 / 16:57