web-dev-qa-db-ja.com

サブシェルの環境変数を設定する

次のような環境変数を使用してコマンドを実行できることはわかっています。

FOO=bar mycommand

次のようなサブシェルでコマンドを実行できることを知っています。

(firstcommand && secondcommand)

しかし、これらの2つをどうにかして組み合わせることができますか?

FOO=bar (firstcommand && secondcommand)

与える:

sh: syntax error: unexpected "("

少なくともbusybox Shell(ash)では。

編集: Kusalanandaが提案したFOO=bar sh -c 'first && second'これは実際に解決策です。ただし、引用符のエスケープをいじる必要がないのでサブシェル構文が好きなので、私は代替の回答にも興味があります。

9
AndreKR

一方通行:

FOO=bar sh -c 'first && second'

これにより、単一のFOOコマンドにsh環境変数が設定されます。

複数の環境変数を設定するには:

FOO=bar BAZ=quux sh -c 'first && second'

これを行う別の方法は、変数を作成し、サブシェル内で変数をexportすることです。サブシェル内でexportを実行すると、外部シェルがその環境で変数を取得しないことが保証されます。

( export FOO=bar; first && second )

コメントの要約:(シェル変数ではなく)環境変数を作成するには、exportが必要です。環境変数の問題は、それらが子プロセスに継承されることです。 firstおよびsecondが環境を参照する外部ユーティリティ(またはスクリプト)である場合、FOOなしではexport変数は表示されません。

11
Kusalananda