rpm -qa > file | wc -l
0を返します。私は何が間違っていましたか?私の目標は明らかだと思いますが、うまくいきません。これはxargs
またはのための専門ですかtee
。
答え1
答え2
はい、これはTシャツの仕事です。
rpm -qa | tee file | wc -l
この構造では、a | b
aの標準出力はbの標準入力に移動します。a > file | b
a形式のすべての出力がファイルに移動し、bの標準入力に何も移動しない場合。tee
このコマンドは、標準入力として受け取ったすべてをファイルと標準出力にコピーします。
答え3
rpm -qa > file ; wc -l file
あなたが欲しいものをする必要があります。
答え4
Bourne または POSIX 互換シェルでは、リダイレクトは左から右に処理され、パイプが最初に表示されます。したがって、コマンドは次のように実行されます(サブプロセス2で発生するジョブは省略されます)。
- パイプラインを作成します。
- 2つのサブプロセス1と2をフォークします。
- 標準出力1をパイプにリダイレクトします。
- 標準出力1をにリダイレクトします
file
。 - 1. 実行
rpm -qa
。
サブプロセス1の出力を両方のチャネル(ファイルとパイプ)にコピーするには、誰かがデータの2つのコピーを作成する必要があります。これがまさにtee
目的です。
rpm -qa | tee file | wc -l
Zshには、次の組み込み出力コピー機能があります。複数のオペレーティングシステム。 zsh で (このオプションを保持する zsh でのみmultios
、 POSIX 互換シェルや POSIX 以前の Bourne シェル、 (t)csh ではない) 作成したようなコマンドはデータを双方向にコピーします。リダイレクト。
# in zsh
rpm -qa >file | wc -l