Definir variáveis em / etc / environment não tendo um efeito, mas defini-las na linha de comando é [duplicado]

4

Estou configurando determinadas variáveis de ambiente para o comando pyspark funcionar. Quando eu defino as variáveis em /etc/environment e as forneço, não funciona. No entanto, quando eu os coloco na linha de comando, eles funcionam, mas é claro que apenas para esta sessão. Minha intenção é defini-los globalmente, para que, mesmo que eu reabra a sessão, eu possa digitar pyspark

Configuração em / etc / environment

[root@localhost ~]# more /etc/environment
[root@localhost ~]# echo "export SPARK_HOME=/srv/spark" >> /etc/environment
[root@localhost ~]# echo "export PATH="$SPARK_HOME"/bin:"$PATH >> /etc/environment
[root@localhost ~]# echo "export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk" >> /etc/environment
[root@localhost ~]# source /etc/environment
[root@localhost ~]# pyspark --version
-bash: pyspark: command not found

Definindo na linha de comando

[root@localhost ~]# export SPARK_HOME=/srv/spark
[root@localhost ~]# export PATH=$SPARK_HOME/bin:$PATH
[root@localhost ~]# export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk
[root@localhost ~]# pyspark --version
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ '/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.1
      /_/

Type --help for more information.
    
por Omnipresent 29.07.2016 / 21:06

2 respostas

9

Coloque os comandos export SPARK_HOME=... etc. nos arquivos de inicialização do seu shell. Com bash, isso seria ~/.profile ou ~/.bash_profile .

No Linux, /etc/environment é normalmente lido por pam_env.so durante o login e não suporta a expansão de variáveis existentes, portanto, definir PATH=$PATH:/something resultará na string literal $PATH para aparecer no seu PATH . Isto não é o que você quer. (Veja, por exemplo, este e isso , também por diversão this .)

Além disso, definir PATH em /etc/environment pode não funcionar, pois os scripts de inicialização globais para o shell podem reescrevê-los. (Eles fazem no Debian por padrão, no antigo CentOS que eu tenho à mão, os scripts de inicialização só parecem preponderar para PATH ).

Se o seu sistema não usa pam_env.so , mas você só usa o script manualmente, então essas considerações não importam, é claro. Mas parece que é amplamente usado por pelo menos algumas distribuições Linux, então pode ser uma boa idéia usar outro nome de arquivo.

(Porque isso é completamente oposto ao que as outras respostas disseram, eu testei em um antigo CentOS.)

Eu coloquei o seguinte em /etc/environment :

export FOO1=bar
export FOO2=foo:$FOO

Depois de fazer login novamente, set | grep FOO mostra:

FOO1=bar
FOO2='foo:$FOO'
    
por 29.07.2016 / 21:52
1

Esta linha não faz o que você pensa:

echo "export PATH="$SPARK_HOME"/bin:"$PATH >> /etc/environment

O problema é que $SPARK_HOME está sendo avaliado durante o echo (como é $PATH ; você provavelmente não quer seu atual PATH nesse arquivo).

Se você cat /etc/environment verá que a linha não parece correta.

Em vez disso, use

echo 'export PATH="$SPARK_HOME/bin:$PATH"' >> /etc/environment

Isso usará os valores de $SPARK_HOME e $PATH no lugar quando você source do arquivo.

    
por 29.07.2016 / 21:12