子プロセスを呼び出す前に他の変数を使用して環境変数を設定するにはどうすればよいですか?

子プロセスを呼び出す前に他の変数を使用して環境変数を設定するにはどうすればよいですか?

私はこのようなbashスクリプトを持っています

# print.sh
# export FOO=test would work too
FOO=test ./foo-proj # Something that cares about FOO (shell script or just a binary)

これはうまくいきます。しかし、なぜこれを行うのか知りたいのですが…

#print.sh
blah="FOO=test"
$blah ./foo-proj

このエラーが発生します./print.sh: line 2: FOO=test: command not found。 bashと同様に、FOO=test変数宣言の代わりにコマンドを解釈します。この問題を解決する方法はありますか?

ベストアンサー1

いくつかのオプション:

env -- "$blah" ./foo-proj

env は./foo-proj環境でオブジェクトを呼び出します。$blahこの場合、変数名が有効なシェル変数名に制限されないという利点があります。たとえば、有効なシェル変数名でない場合は、「even」という環境変数をblah='+++=xxx'渡す必要があるかもしれません。++++++

(export -- "$blah"; exec ./foo-proj)

または:

eval  " $blah ./foo-proj"

whereはeval引数として渡され、" FOO=test ./foo-proj"文字列はシェルコードとして評価されます(ここでは=リテラルなので、割り当てと見なされます)。

$blahただし、この場合はblah='FOO=test;reboot;'再開されますのでご注意ください。

おすすめ記事