web-dev-qa-db-ja.com

環境変数はbashスクリプトでアクセスできません

私は奇妙な問題に遭遇しました。私はいくつかのenv変数を.bashrcに入れました。

echo $HADOOP_HOME
/home/me/dist/hadoop

ただし、bashスクリプトを実行する場合、env変数にはアクセスできません。以下のコンテンツで/tmp/sample.shを作成するとします:

#! /bin/bash
echo $HADOOP_HOME

上記のスクリプトを実行すると、空の行がエコーされます。

/tmp/sample.sh
   ‌
19
Mehraban

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を使用してください。

24
terdon