次のようにBashで環境変数を設定しようとしていますが、以前bash -c 'export FOO=BAR'
に設定した変数を使用または読み取ろうとすると、変数が初期化されず、コマンドが空行を返すことがわかります。echo $FOO
bash -c 'echo $FOO'
bash -c 'export FOO=BAR'
最初にプログラムを起動したのと同じシェルからアクセスできるように、Bashを使用してコマンドラインで環境変数を設定するにはどうすればよいですか?
ベストアンサー1
実行すると、bash -c 'FOO=bar'
新しいインスタンスが作成され、コマンドを実行してすぐに終了します。変数は、非常に短い時間だけ存在し、あたかも存在しなかったかのように消えます。bash
FOO=bar
FOO
あなたが言及しているサンプル文書は、次のような他の作業を行います。
bash -c 'export FOO=bar; run_some_entry_point'
source
詳細は若干異なります。変数を定義するためにスクリプトが実行され、コマンドが失敗した場合は、エントリポイントの実行を防ぐためにコマンドをリンクするため&&
に使用されます。source
bash -c 'source file_containing_variable_exports && run_some_entry_point'
最も重要なことは、これが単一のシェルインスタンスによって実行される単一のコマンドであることです。シェルインスタンスは、エクスポートされたとマークされた変数を定義し、エクスポートされた変数が存在する環境でコンテナ(または他の)エントリポイントを開始します。
上記のコマンドのこのバージョンは機能しません。
bash -c 'export FOO=bar'; run_some_entry_point
ここで環境変数を定義したbashインスタンスは終了し、元のシェルは変数なしでエントリポイントを実行します。
ただし、特定の環境変数を使用してコマンドを実行するために別のコマンドを使用する必要はありませんexport
。シェルには次の構文があります。
bash -c 'FOO=bar some_program arg ...'
複数の変数を指定できます。これらの変数はシェル自体の環境に設定されず、単にランチャーに追加されます。