1. ホーム
  2. bash

[解決済み] Bashでコマンドの前に環境変数を設定すると、パイプ内の2番目のコマンドで動作しない

2022-03-21 05:31:53

質問

あるシェルでは、通常、変数を設定してからコマンドを実行します。最近、コマンドに変数定義を前置する概念を知りました。

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


良い回答がたくさんありました 目標はこれをワンライナーにすることで、できれば "export" を使わないで済むようにすることです。Bashへの呼び出しを使った方法が全体的に一番良かったのですが、"export"が入った親文字のバージョンはもう少しコンパクトでした。パイプではなく、リダイレクトを使う方法も面白いですね。

どのように解決するのか?

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