環境変数の永続性がPATH varを破壊するのはなぜですか?

環境変数の永続性がPATH varを破壊するのはなぜですか?

を使用しようとしています/etc/environment

私の変数が消去されましたPATH。それ以降、コマンドは認識されませんでした。

シェルで同じコマンドを実行すると問題はありませんが、なぜこれが起こるのですか? !

私のコンテンツ/etc/environment

ORACLE_HOME=/usr/lib/oracle/12.1/client64
PATH=$ORACLE_HOME/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib

ベストアンサー1

/etc/environment構成ファイルですpam_env、シェルから読み取ったファイルではありません。構文はやや似ていますが、違います。特に、既存の変数を参照できません。$ORACLE_HOME/binとを含むように検索パスを設定しました$PATH。つまり、名前にドル記号があるディレクトリです。

すべてのユーザーに変数を設定するには、を編集します。/etc/security/pam_env.confこの構文はより多様で豊富な構文を持っていますが、それでもシェルで実行できるほど豊富ではありません。

ORACLE_HOME DEFAULT=/usr/lib/oracle/12.1/client64
PATH OVERRIDE=/usr/local/bin:/usr/bin:/bin:${ORACLE_HOME}/bin
LD_LIBRARY_PATH DEFAULT=$ORACLE_HOME/lib

他の変数は参照できますが、変数の以前の値は参照できません。

より柔軟なアプローチが必要な場合は、変数定義を追加してください/etc/profile。ここでは、すべてのシェル構成を使用できます。欠点は、cronなどを介さずにログインセッションでのみ読むことができることです。. /etc/profile;ただし、cronジョブの起動時に追加すると簡単に利点があります。

export ORACLE_HOME=/usr/lib/oracle/12.1/client64
PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

おすすめ記事