したがって、「tee」を使用すると、「ping」などのコマンドの出力をファイルだけでなく標準出力にリダイレクトできることがわかります。
たとえば、
> ping google.com | tee somefile
これにより、端末にping統計が表示され、「somefile」に書き込まれます。
「ping」の出力を修正するには、次のように「cut」を使用できます。
> ping google.com | cut -d' ' -f 1
ただし、3 つのコマンドをすべて一緒に使用する場合は、出力がなく、標準出力に空のファイルが表示されます。
> ping google.com | cut -d' ' -f 1 | tee somefile
私は何が間違っていましたか?もっと良い方法がありますか?なんだか「ティー」を正しく使わないような感じがします。どんな洞察力でも大変感謝いたします。
該当する場合は bash シェルを使用しています。
答え1
パイプコマンドが出力を非ターミナル宛先にバッファリングしています。最終的には表示されますが、出力がたくさん生成された場合、またはpingコマンドが終了した場合にのみ表示されます。
ping -c 5 google.com
送信する特定の数のパケットを設定するために使用できます。これにより、pingは終了します。出力が返され、パイプは期待どおりに動作するはずです。
編集:stdbuf
パイプバッファリングを避け、awk
一部の内部cut
バッファリングを回避し、pingが継続的に実行されるようにするもう1つの回避策は次のとおりです。
ping www.google.com | stdbuf --output=0 awk '{print $1}' | tee /tmp/file