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


22

私は奇妙な問題に遭遇しました。私はいくつかのenv変数を入れました.bashrc、そして、それはそうするべきです:

echo $HADOOP_HOME
/home/me/dist/hadoop

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

#! /bin/bash
echo $HADOOP_HOME

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

/tmp/sample.sh
   

1
あなたの関連部分を見せてもらえます.bashrcか?私が推測するのは、あなたがexportingしていないということです:sample.sh`(新しい環境で新しいものを生成します)をexport HADOOP_HOME=/home/me/dist/hadoop実行するとき、HADOOP_HOMEは新しい環境にありません。/tmpbash
ジョンN

回答:


29

これ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

シェルスクリプトを実行すると、そのスクリプトは現在のインスタンス#!/bin/bashの子シェルである独自のbashインスタンスで実行されます(これが行うことです)。変数は、エクスポートされた場合にのみ、デフォルトで子シェルに渡されません。各bashセッションは独立していると考えてください(大部分はそうです)。通常、1つの変数を別の環境で汚染することは望ましくありません。それが必要な場合には、を使用してくださいexport

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.