パイプコマンドでteeを使用すると、奇妙な出力が発生します。

パイプコマンドでteeを使用すると、奇妙な出力が発生します。

私のタスクでは、次のコマンドを使用する必要があります。

who|tee test|wc -l

私のシステムの出力は次のとおりです。これは、2人のユーザーが接続されていることを意味します。

2

なぜwho画面に出力が出ず、出力も出ないのですかwc -ltee出力を画面に記録すると同時に、同じ出力を持つファイルを作成すると思いましたか?

whoしかし、私のファイルでは、テスト「しかし、まだ私には理解できません。

ベストアンサー1

パイピングの効果は、tee最初のコマンドが何でも記録することです。標準出力ファイル(名前がコマンドライン引数として渡されますtee)とteeコマンドの標準出力に書き込みます。パイプが継続されず、コマンドへのリダイレクトを実行しない場合のtee標準tee出力は、シェル(通常は端末)の標準出力です。

これがrunningwhoとrunningがwho | tee test端末に同じテキストを表示する理由です。あなたとの違いは、teeファイルに書き込むことです。

パイプが継続すると、who | tee test | wc -l端末に書き込まれたすべての標準出力がパイプの次のコマンドに送信されます。これとは異なり、入力を標準出力(または他の場所)にコピーしないwcコマンドです。代わりに統計を表示します。このオプションを使用すると、行数だけが表示されるため、表示されるすべてです。teewc-l

2だからそれだけ見る理由who | tee test | wc -lとそれだけ見る理由は同じだ。このコマンドは出力をファイルに書き込みますが、次の場合を除き、端末に印刷しません。2who | wc -lteewhoそれ標準出力は端子です。これは通常デフォルトで適用されますが、他のコマンドにパイプする場合は適用されません。

|パイプの次のコマンドへの入力として使用されるのではなく、出力がターミナルに表示されるコマンドが左側に表示された場合は、おそらく次のように書いています。標準エラー標準出力の代わりに。

おすすめ記事