web-dev-qa-db-ja.com

/ etc / environmentで変数を設定しても影響はありませんが、コマンドラインで設定すると、

コマンドpysparkが機能するように、特定の環境変数を設定しています。変数を/etc/environmentに設定してソースすると、機能しません。ただし、コマンドラインで設定した場合は機能しますが、もちろんこのセッションでのみ機能します。私の意図は、それらをグローバルに設定して、セッションを再度開いた場合でもpysparkと入力できるようにすることです

/ 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

コマンドラインでの設定

[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.
7
Omnipresent

シェルのスタートアップファイルにexport SPARK_HOME=...などのコマンドを配置します。 bashでは、~/.profileまたは~/.bash_profileになります。


Linuxでは、/etc/environmentは通常、ログイン時にpam_env.soによって読み取られ、既存の変数の拡張をサポートしていないため、PATH=$PATH:/somethingを設定するとになります。リテラルPATHに表示される文字列$PATH。これはあなたが望むものではありません。 (例: thisthis も参照してください this もお楽しみください)

また、/etc/environmentPATHを設定しても機能しない可能性があります。これは、シェルのグローバル起動スクリプトによって書き換えられる可能性があるためです。 (これらはデフォルトでDebianで実行されます。古いCentOSでは便利です。起動スクリプトはPATHの前に追加するだけのようです)。

システムがpam_env.soを使用せず、スクリプトを手動でソースするだけの場合、これらの考慮事項はもちろん重要ではありません。しかし、少なくともいくつかのLinuxディストリビューションで広く使用されているように見えるため、別のファイル名を使用することをお勧めします。


(これは他の答えが言ったこととはまったく反対なので、私は古いCentOSでテストしました。)

以下を/etc/environmentに入れます。

export FOO1=bar
export FOO2=foo:$FOO

再度ログインすると、set | grep FOOに次のように表示されます。

FOO1=bar
FOO2='foo:$FOO'
12
ilkkachu

この行はあなたが思っていることをしていません:

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

問題は、$SPARK_HOMEechoの間に評価されていることです($PATHと同様に、そのファイルにcurrent PATHをおそらく望まないでしょう)。

cat /etc/environmentの場合、線が正しくないことがわかります。

代わりに、

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

これは、ファイルをsourceするときに$SPARK_HOME$PATHの値を使用します。

1
Stephen Harris