9

ファイル ~/.bash_profile の行は次のとおりです

export MESSAGE="Hello World"

MESSAGEjavaでシステム変数にアクセスしたい。

System.getenv("MESSAGE");動作しません。

4

4 に答える 4

5

.bash_profile ファイルは、ログイン シェル用にのみ供給されます。Java プロセスがログイン シェルではないシェル (#!/bin/sh先頭に があるスクリプトなど) から生成された場合、それは読み込まれません (ただし、実行方法によっては環境から MESSAGE を継承する場合があります)。

.bash_profile は、「ログイン」シェルではない対話型シェルでも実行されないため、シェル プロンプトが表示されている場合でも、実行されていることに依存できないことにも注意してください。人々は通常、その目的のために、すべての対話型シェルのソースである .bashrc を使用します。

インタラクティブかどうかに関係なく、すべての Bourne シェルの派生物で変数を設定したい場合は、.profile と .bashrc の両方に入れます。

于 2012-09-06T16:50:37.097 に答える
1

上記のように echo $MESSAGE を使用して、環境変数が実際に「定義」されているかどうかをテストすることをお勧めします。
さらに、bash_profile ファイルを変更しても、現在のシェルには影響しません。現在のシェルに影響
を与えるには、「source」を使用する必要があります。また、bashrc と bash_profile の違いに関するこの
記事 を読むことをお勧めします。 たぶん、bashrc で EXPORT を定義する必要がありますか?

于 2012-09-06T16:49:19.267 に答える
1

これは実際には、(古い Bourne シェル用の) .profile を持っているユーザーにとってさらに興味深いものになり、.bash_profile によって自動的に読み込まれます (互換性を提供します)。いずれの場合も、環境変数はログインシェルの起動時に 1 回だけ読み込まれ、すべてのサブシェルはそれらの変数を無料で継承します。.bashrc は、tty に依存するものと関数のような継承不可能なもの用です (古い sh は $ENV を使用していたと思いますが、設定されている場合は、同様のものに使用されます)。

~/.bash_profile の使用は問題ないように見えます (ただし、一重引用符は二重引用符よりも信頼性が高く、いくつかの置換が可能です)。そのファイルの編集とテストの試行の間にログアウトして再度ログインしたことを確認するか、「. ~/.bash_profile」を使用してください (ドットはここではコマンドであるため、引用符は使用せず、先頭のドットとスペースに注意してください)。

http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.htmlの記事では、~/.bash_profile の最後に ". ~/.bashrc" を使用するなど、いくつかの良い点について説明しています (ただし、 -f ではなく -r を使用します)。.bashrc で export を使用することに関するコメントは間違っています。これを行うべきではありません。2 つの理由から (1) パフォーマンスが大幅に低下する (2) 実行するコマンドが環境変数を取得しない可能性が非常に高い -特に、ウィンドウ マネージャのメニューや、実際のコマンド プロンプトが親のいずれにも表示されなかったその他の場所から生成されたもの。

最後に、$MESSAGE が実際に環境に存在することを確認します - 「env」コマンドの出力を見てください - そこに存在しない場合、Java プロセスはそれを内部で作成して独自の場所に保存しない限り、それを認識しません。環境変数の内部コピー。

別の注意として、.profile で環境変数を設定する場合は、次の構文を使用します。

VAR=値; VAR のエクスポート

...古い sh シェルは「export VAR=VALUE」をサポートしていないためです。これらの束の前に set -e を使用し、後で set +e を使用すると、正しく覚えていれば、「エクスポート」を使用する必要がまったくなくなります。

于 2012-09-06T17:23:11.283 に答える