端末でいくつかの環境変数を設定し、スクリプトを実行します。スクリプトから変数を抽出するには?彼らの価値観を理解する必要があります。単に呼び出すのは$MY_VAR1
うまくいきません。
答え1
export
これらの変数が実際にスクリプトが呼び出される環境(つまり、エクスポートされた環境)の環境変数である場合会議スクリプトで使用できます。そのエントリが存在しないことは、そのエントリがエクスポートされていないか、またはそのエントリが存在しない環境でスクリプトをシェル変数として実行していることを示します。
例:
$ cat script.sh
#!/bin/sh
echo "$hello"
$ sh script.sh
hello
(どこにも存在しないので出力の空行)
$ 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
答え2
スクリプトを呼び出す前に、スクリプトからアクセスしたい環境変数をエクスポートしていることを確認してください。つまり:
Unix> export MY_TEMP=/tmp
Unix> some_script.sh
some_script.shは$ MY_TEMPにアクセスできるようになりました。シェルスクリプトを呼び出すと、スクリプトコマンドの前にピリオド(".")を追加して、「取得しない」限り、エクスポートした変数のみを含む新しい環境を取得します。スペース、それからあなたのスクリプト名:
Unix> . some_script.sh # runs in current environment
デバッグのヒント:スクリプトの上部にコマンドを含め、set
スクリプトで表示できる変数を確認してください。
答え3
また、「スクリプトの実行中」のみが存在するようにするには、そのエクスポートをファイルに配置してから、スクリプトからそのファイルをインポートできます。
スクリプトを実行すると新しいシェルで実行されるため、これらの変数はそのサブシェル(およびそのサブシェル)からのみエクスポートされ、独自のシェルでは終了しません。スクリプトの実行が終わったら、自動的に設定を解除します。
例:
# config.txt
export SECRET=foobar
# prog.sh
#!/usr/bin/env sh
source ./config.txt
echo $SECRET
今実行してみてください:
chmod +x prog.sh
./prog.sh
次に、SECRET変数が自分のシェルに漏れないことを確認してください。
echo $SECRET # <-- must echo a blank line