web-dev-qa-db-ja.com

bashスクリプトに環境変数をインポートする

ターミナルでいくつかの環境変数を設定してから、スクリプトを実行します。スクリプト内の変数を取得するにはどうすればよいですか?私は彼らの価値観を知る必要があります。それらを単に$MY_VAR1機能しません。それは空です。

3
Mark

変数が、スクリプトを呼び出す環境で本当に環境変数である(つまり、exportでエクスポートされている)場合は、スクリプトでwouldを使用できます。それらがエクスポートされていない、またはシェル変数としても存在しない環境からスクリプトを実行することを示唆していないことを意味します。

例:

$ cat script.sh
#!/bin/sh

echo "$hello"
$ sh script.sh

helloはどこにも存在しないため、出力の1行の空行)

$ hello="hi there"
$ sh script.sh

(それでもhelloとしての出力として空の行のみがシェル変数であり、環境変数ではありません)

$ export hello
$ sh script.sh
hi there

または、このスクリプト専用であり、呼び出し環境ではない環境変数を設定するには:

$ hello="sorry, I'm busy" sh script.sh
sorry, I'm busy
$ env hello="this works too" sh script.sh
this works too
10
Kusalananda

スクリプトを呼び出す前に、スクリプトでアクセスする環境変数をエクスポートする必要があります。 IE:

Unix> export MY_TEMP=/tmp
Unix> some_script.sh

これで、some_script.shは$ MY_TEMPにアクセスできるようになります。シェルスクリプトを呼び出すと、スクリプト変数の前にピリオド( "。")を付けて "ソース"しない限り、変数のみがエクスポートされた新しい環境が得られます。スペース、次にスクリプト名:

Unix>  . some_script.sh  # runs in current environment

デバッグのヒント:スクリプトの上部近くにsetコマンドを含めて、スクリプトが参照できる変数を確認します。

3
Mark Stewart