私は奇妙な問題に遭遇しました。私はいくつかのenv変数を.bashrc
に入れました。
echo $HADOOP_HOME
/home/me/dist/hadoop
ただし、bashスクリプトを実行する場合、env変数にはアクセスできません。以下のコンテンツで/tmp/sample.sh
を作成するとします:
#! /bin/bash
echo $HADOOP_HOME
上記のスクリプトを実行すると、空の行がエコーされます。
/tmp/sample.sh
HADOOP_HOME
変数がエクスポートされていないためです:
$ cat foo.sh
#!/bin/bash
echo "HADOOP_HOME: $HADOOP_HOME"
$ HADOOP_HOME=/home/me/dist/hadoop
$ echo $HADOOP_HOME
/home/me/dist/hadoop
$ foo.sh
HADOOP_HOME:
$ export HADOOP_HOME
$ foo.sh
HADOOP_HOME: /home/me/dist/hadoop
シェルスクリプトを実行すると、そのスクリプトは現在の子シェルである独自のbashインスタンス(#!/bin/bash
が行うこと)で実行されます。変数は、エクスポートされた場合にのみ、デフォルトで子シェルに渡されません。各bashセッションは独立していると考えてください(大部分はそうです)。通常、1つの変数を別の環境で汚染することは望ましくありません。それが必要な場合には、export
を使用してください。