回答:
source tmp.txt
export a b c
./child ...
他の質問から判断すると、変数名をハードコードしたくありません:
source tmp.txt
export $(cut -d= -f1 tmp.txt)
試して:
$ source tmp.txt
$ echo "$a $b $c"
123 hello world one more variable
$ perl -E 'say "@ENV{qw(a b c)}"'
$ export $(cut -d= -f1 tmp.txt)
$ perl -E 'say "@ENV{qw(a b c)}"'
123 hello world one more variable
grep
してコメントをスキップできますexport $(grep --regexp ^[A-Z] tmp.txt | cut -d= -f1)
set -a
. ./tmp.txt
set +a
set -a
これにより、今後定義される変数¹が自動的にエクスポートされます。Bourneのようなシェルで使用できます。.
以下のための標準とボーン名ですsource
ので、私は(移植性のためにそれを好むコマンドsource
から来ているcsh
とを含む、ほとんどの近代的なボーンのようなシェルで利用できるようになりましたbash
)時には、わずかに異なる動作をする(が)。
POSIXシェルではset -o allexport
、より記述的な代替方法としてそれを記述(set +o allexport
設定解除)することもできます。
¹ではbash
、オンになっている間に宣言されたすべての関数がallexport
環境にエクスポートされることに注意してください(BASH_FUNC_myfunction%%
環境変数は、としてbash
実行されている場合でも、その環境で実行されるすべてのシェルによってインポートされますsh
)。
ただやる:
while read LINE; do export "$LINE"; done < ./tmp.txt
set -a
ははるかに簡単ですが、これは実際に機能します。