web-dev-qa-db-ja.com

rpmコマンドに「--pipe」オプションがあるのはなぜですか?

Rpmのマニュアルページから:

   --pipe CMD
          Pipes the output of rpm to the command CMD.

なぜこれが追加されたのですか?シェル自体を介して配管する代わりに、なぜそれを使用するのですか?

5
Ginger Jesus

このオプションは、rpmがシェルから呼び出された場合には役に立ちません。

しかし、他のプログラムから呼び出された場合、それらの引数が何らかの形式のユーザー入力から構築されている場合、非静的引数をrpmに渡すのが簡単になります(呼び出し側プログラムがシェルを強制的に呼び出さない言語で記述されている場合)とにかく他のプログラムを実行するには):

  • シェルを使用しない場合、呼び出し側プログラムはそれ自体でパイプをセットアップし、rpmCMDを別々に呼び出して待機する必要があります。
  • sh -c ´rpm Argument1 Argument2 ...´ | CMDのようなシェルを使用する場合、引数にスペースやシェルのメタ文字が含まれている可能性がある場合に、引数が単語に分割されたり、シェルによって解釈されたりしないように、引数を引用符で囲む追加レベルが必要です。
    rpmへの引数が呼び出し側プログラムへのユーザー入力である場合、それはTom and Alice´s dogである可能性があり、プログラマーは引数を作成するときにそれをTom\ and\ Alice\´s\ dogに変換する必要があります。シェルのリスト。 (そして、CMDへの引数はすべて同じ方法で引用する必要があります。)
    これは遅く、エラーが発生しやすく、セキュリティ上の懸念を引き起こす可能性があります。
  • --pipeオプションを使用する場合、呼び出し側プログラムはこれらのいずれも必要としません。
    (ただし、CMDは単一であるため、CMDはrpmから呼び出されるシェルによって解釈されるため、CMDへの引数はすべて引用符で囲む必要があります。単一の引数からrpmへの単語。)
1
Juergen