しばらくこの質問が気になりましたが、いつも尋ねるのを忘れました。
次のパイプラインがある場合:
a | b
次のように環境変数を個別に設定する方法はありますか?
x="foo" a | x="bar" b
答え1
標準は、特定の環境設定の前にシェルマクロ拡張が行われるように定義するため、実行したい操作が標準と競合します。
special shell builtin
POSIXでは、シェル全体に影響を与えるために先行する環境ステートメントが必要なので、必要に応じて実行できる方法もあります。コマンド:
は次のとおりですspecial shell builtin
。
努力する:
(x="foo" :; a) | (x="bar" :; b)
メインシェルプロセスが影響を受けないようにするには、これをサブシェルで実行する必要があります。 OPが彼の意見で期待した内容を置き換えてa
印刷すると、b
次のようになります。echo $x,
(x="foo" :; echo $x) | (x="bar" :; echo $x)
まあ、パイプの左側の出力が失われます...
ただし、すでにサブシェルを使用する必要があるため、次のものを使用できます。
(x="foo"; echo $x) | (x="bar"; echo $x)
構文を使用して最初にサブシェルでシェル変数を設定し、それを使用します。x
コマンドから環境に必要な場合は、export x
後者の例で必要です。