JAVA_HOME
grid
私の目標は、hadoopの従来のユーザー名であるというユーザーの環境変数を設定することです。マイコンピュータは、VMware Workstation、64ビットCentOS7に展開された仮想マシンです。
私がしたこと:ユーザー固有の環境変数を変更する必要があるファイルを編集しました。つまり、
~/.bash_profile
以下は私のコードです。export JAVA_HOME=/home/grid/jdk export HADOOP_HOME=/home/grid/hadoop PATH=$PATH:$HADOOP_HOME:$JAVA_HOME export PATH
非常に興味深いことに、ユーザーとしてログインして
grid
実行するとecho $HADOOP_HOME
表示されますが、/home/grid/hadoop
実行すると応答がありませんecho $JAVA_HOME
。実際には何もなく、空の文字列やnullなどの内容が表示されます。私は実行しcd $JAVA_HOME
、ホームディレクトリに移動します。JDKフォルダを変更してみましたが、成功しませんでした。別のコンピュータで同じコードを試しましたが、うまくいきました。コードを入力し
/etc/profile
てrootとしてログインしましたが、同じことが起こりました。問題はありませんが、echo $HADOOP_HOME
応答はありませんecho $JAVA_HOME
。
答え1
まず、注目すべきことがあります$PATH
。ディレクトリJAVA_HOME
に設定しましたが、場合には設定する必要があります。jdk
PATH
$JAVA_HOME/bin
次に、これらの変数を非対話型スクリプトで使用できる必要がある場合は、対話型ログインでのみ読み取ることができるため、その~/.bashrc
変数を配置する必要があります。~/.bash_profile
実際に(ログインシェル)設定ファイルを読み取る実際の順序は次のとおりです。
/etc/profile
それから:
~/.bash_profile
(CentOSでは-f ~/.bashrc
、source~/.bashrc
)~/.bash_login
~/.profile
(Ubuntuでは-n $BASH_VERSION
、source~/.bashrc
)
編集:これらのファイルのいずれかが見つかった場合、ソースが明確でない限り、他のファイルは処理されません。
非ログインであるシェル(デフォルトでは)は~/.bashrc
。
したがって、実行方法によっては、bash
これらの行が追加された構成ファイルを読み取ることができない場合があります。テストするたびにsudo -u grid bash
、su grid
または、またはを実行するsu - grid
か、新しいSSHセッションを開始していますか?これらのオプションの一部は、対話型ログイン bash シェルをトリガーしない場合があります。
したがって、上記の各ファイルを確認し、それらの変数を設定解除またはリセットするファイルがあることを確認してくださいJAVA_HOME
。次に、~/.profile
ログインシェルがインポートする最後のファイルの最後に次の行を追加します。
デバッグ目的で設定ファイルにメッセージを追加して、正しく設定されていることを確認できます。
~/.profile
:
export JAVA_HOME=/home/grid/jdk
echo "DEBUG: .profile: JAVA_HOME is [$JAVA_HOME]"
export HADOOP_HOME=/home/grid/hadoop
echo "DEBUG: .profile: HADOOP_HOME is [$HADOOP_HOME]"
PATH=$HADOOP_HOME:$JAVA_HOME/bin:$PATH
echo "DEBUG: .profile: PATH is [$PATH]"
export PATH
これにより、対話型ログインシェルにログインすると3行の出力が得られ、括弧の間の値を見ると、その値が最初に設定されていることを簡単に確認できます。見たらJAVA_HOME
はいソースのインポート時に設定されますが、~/.profile
シェルがインタラクティブになると設定されません。これにより、値が変更された場所を確認するためにログインプロセスを追跡し続ける必要があることがわかります。