環境変数の参照* in * / etc / environment?


19

私は最近/etc/environment、スクリプトよりも単純な環境変数をセットアップするより標準的な方法のように見えましたが、/ etc / environmentファイルに環境変数を逆参照する方法があるのではないかと考えていました。

つまり、私はこれを持っています:

JAVA_HOME="/tools/java"
GRAILS_HOME="/tools/grails"
GROOVY_HOME="/tools/groovy"
GRADLE_HOME="/tools/gradle"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

$JAVA_HOME/binただし、PATH定義に追加しようとすると、補間された変数ではなく、$ JAVA_HOME / binが取得されます。これを修正するために、profile.dにenvironment.shを作成/binしてパスにエントリを追加していますが、これはずさんで整理されていないようです。

/ etc / environmentの環境変数を後方参照する方法はありますか?

回答:


13

/etc/environmentファイルがによって読み取られpam_envPAMモジュール。右側の置換なしで、単純なキーと値のペアのみをサポートします。

置換またはその他のシェル拡張を使用して値を作成する場合は、シェルを使用する必要があります。/etc/profile(またはのファイル/etc/profile.d)がこれらに適しています。これは伝統的な場所であり(/etc/environmentunixシステムの歴史上、比較的最近の技術革新です)、それを使用することについては何もありません。主な利点は/etc/environment、シェルを使用しないログインメソッドでも、Bourne以外のシェルを使用するユーザーでも、環境変数を設定できることですが、これらは実際には一般的ではありません。


置換せずに、あなたが冗長性の多くで終わる/etc/environment、私はに頼っ/etc/profile、あなたの提案に感謝を。
SAFX

2

Ubuntuのドキュメントでは、これは不可能に思えます。しかし、答えがあります。

答え:永続的なシステム全体の環境変数を作成します/etc/.bashrc

JAVA_HOME="/tools/java"
...
PATH="$JAVA_HOME:$PATH"  

詳細:
ここに、環境変数のドキュメントの詳細を示します
公式の推奨事項は/etc/environment、あなたが試したようにを使用することです。問題は、このファイルがスクリプトファイルではないことです。つまり、変数宣言で変数を使用することはできません。

ドキュメントには、他の2つの「推奨されない」ファイル
/etc/profileとが続きます/etc/bash.bashrc

/etc/profile「/etc/bash.bashrcファイルを呼び出す以上のことはしません」。代わりに選択してください

/etc/bash.bashrc 「ユーザーがシェルまたはデスクトップ環境に入るたびにこのファイルを実行するようにデフォルトでUbuntuが設定されているため」


一部のUbuntu開発者と協議してEnvironmentVariablesを更新したため、これらの「推奨されない」ステートメントはもうありません。
グンナルHjalmarsson 14年

「ユーザーがシェルに入るたびに」。シェルに入るユーザーがいない場合はどうすればよいですか?起動時にソフトウェアを実行する自動ユーザーに環境変数が必要です。たとえば、6行のプロキシ構成だけがあります。どうすればいいですか?
eis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.