web-dev-qa-db-ja.com

/ etc / environmentの$構文の「ポインター」

$ FOO構文を使用して/ etc/environmentに「ポインター」を持つことは有効ですか?現在、私の/ etc/environmentは次のようになっています。

Java_HOME=/usr/lib/jvm/Java-6-openjdk
MAVEN_HOME=/usr/bin/Apache-maven/Apache-maven-3.0.4
M2_HOME=$MAVEN_HOME
M2=$MAVEN_HOME/bin
PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:$Java_HOME/bin:$MAVEN_HOME/bin

しかし、私は期待している結果を得ていません:

~$ echo $Java_HOME
/usr/lib/jvm/Java-6-openjdk
~$ echo $MAVEN_HOME
/usr/bin/Apache-maven/Apache-maven-3.0.4
~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/bin:/usr/games:$Java_HOME/bin:$MAVEN_HOME/bin
6
Tyson Trautmann

/etc/environmentに関するドキュメントはあまり見つかりませんでしたが、期待どおりに機能しない理由は、「スクリプトファイルではない」ため、シェルによって処理されないためです。定義された変数は機能しません。これは、表示されている動作を説明しています。

.profileまたは.bashrcでこれらの種類の環境変数を定義するか、すべてのユーザーに必要な場合は/etc/profile.dまたは/etc/bash.bashrcで定義することをお勧めします。

環境変数の設定に関するかなり詳細なドキュメントがいくつかあります here であり、.profileまたは.bashrcのいずれかを、このようなものを置くのに適した場所として示しています。

7
roadmr

/etc/environmentでポインターを使用できますが、別の構文を使用する必要があります。

試してください:

Java_HOME=/usr/lib/jvm/Java-6-openjdk
MAVEN_HOME=/usr/bin/Apache-maven/Apache-maven-3.0.4
M2_HOME=${MAVEN_HOME}
M2=${MAVEN_HOME}/bin
PATH="/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${Java_HOME}/bin:${MAVEN_HOME}/bin"

別の変数の割り当てを参照する場合は、変数名を中括弧{}で囲んでください。したがって、$Java_HOMEの代わりに${Java_HOME}を使用します。また、他の変数へのポインタがある変数の値を引用符で囲む必要があるようです:

PATH="... ${SOME_VAR} ..."

2
mkhezr

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

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

Java_HOME="/tools/Java"
...
PATH="$Java_HOME:$PATH"  

詳細:
これに関するより長い回答を投稿しました AskUbuntuの質問

1
csi