環境変数を子プロセスに継承したい場合は、次のようにします。
export MYVAR=tork
変数への値(スペースを含めることができる)の割り当てを含むファイルsite.conf
があると仮定します。
EMAIL="[email protected]"
FULLNAME="Master Yedi"
FOO=bar
ここで、新しいシェルを開くたびに(たとえば、~/.bashrc
または~/.profile
にコードを使用して)このファイルを処理し、新しく開いたシェル内から開始されたプロセスが環境を介して割り当てを継承するようにします。変数。
明らかな解決策は、site.conf
の各行の前にexport
を付けて、ファイルをソースすることです。ただし、ファイルは他のアプリケーションによっても(直接)読み取られるため、これを行うことはできません。そのため、形式は固定されています。
私は次のようなことを試みました
cat site.conf | while read assignment
do
export "${assignment}"
done
ただし、これはさまざまな理由で機能しません(最も重要なのは、export
がサブシェルで実行されるため、変数が呼び出し元のシェルの子にエクスポートされないことです)。
プログラムでbashの未知の変数をexport
する方法はありますか?
実行set -a
ファイルを調達する前。これにより、エクスポートに続くすべての新規および変更された変数が自動的にマークされます。
set -a
source site.conf
set +a # Require export again, if desired.
観察した問題は、パイプがサブシェルでexport
を実行することです。パイプの代わりに入力リダイレクトを使用するだけで、これを回避できます。
while read assignment; do
export "$assignment"
done < site.conf
ただし、これは機能しません。たとえば、1行に複数の割り当てがある場合は、機能しません。
EMAIL="[email protected]" FULLNAME="Master Yedi"