Bash のコマンドの前に環境変数を設定しても、パイプの 2 番目のコマンドでは機能しません。質問する

Bash のコマンドの前に環境変数を設定しても、パイプの 2 番目のコマンドでは機能しません。質問する

特定のシェルでは、通常、変数を設定してからコマンドを実行します。最近、変数定義をコマンドの先頭に追加するという概念について学びました。

FOO=bar somecommand someargs

LC_*これは、ある程度は機能します。変数を変更する場合 (これはコマンドには影響しますが、文字範囲などの引数には影響しません)、または出力を別のコマンドにパイプする場合は機能[a-z]しません。

FOO=bar somecommand someargs | somecommand2  # somecommand2 is unaware of FOO

somecommand2 の前に を付けることもできますFOO=barが、これは機能しますが、不要な重複が追加され、変数に応じて解釈される引数 (たとえば、 ) には役立ちません[a-z]

では、これを 1 行で行うにはどうすればよいでしょうか?

私は次のようなことを考えています:

FOO=bar (somecommand someargs | somecommand2)  # Doesn't actually work

たくさんの良い回答をいただきました。目標は、できれば を使用せずに、これを 1 行にすることですexport。Bash への呼び出しを使用する方法が全体的に最も優れていましたが、その中に を含む括弧付きバージョンの方がexport少しコンパクトでした。パイプではなくリダイレ​​クトを使用する方法も興味深いです。

ベストアンサー1

FOO=bar bash -c 'somecommand someargs | somecommand2'

おすすめ記事