次のような環境変数を使用してコマンドを実行できることはわかっています。
FOO=bar mycommand
次のようなサブシェルでコマンドを実行できることを知っています。
(firstcommand && secondcommand)
しかし、これらの2つをどうにかして組み合わせることができますか?
FOO=bar (firstcommand && secondcommand)
与える:
sh: syntax error: unexpected "("
少なくともbusybox Shell(ash)では。
編集: Kusalanandaが提案したFOO=bar sh -c 'first && second'
これは実際に解決策です。ただし、引用符のエスケープをいじる必要がないのでサブシェル構文が好きなので、私は代替の回答にも興味があります。
一方通行:
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
変数は表示されません。