画面に出力を印刷し、ファイルにリダイレクトし、エラーを別のファイルに渡します。

画面に出力を印刷し、ファイルにリダイレクトし、エラーを別のファイルに渡します。

私はこの実験室の質問に答えようとしています。teeコマンドを使用せずにこの問題を解決する方法はありますか?

server1のuser1で、およびlsでコマンドを実行します。出力を画面に印刷し、ファイルにリダイレクトし、エラーをファイルに渡します。コマンドが実行されたら、両方のファイルを確認して結果を分析します。 (ヒント:入力、出力、エラーリダイレクト)。/etc/dvd/var/tmp/ioutput/tmp/ioerror

これを試みると、出力は画面に印刷されません。

[user1@server1 ~]$ ls /etc /dvd /var 1> /tmp/ioutput 2> /tmp/ioerror

コマンドと一緒に使用すると、teeエラーファイルは空です。

ls /etc /dvd /var | tee /tmp/ioutput 2> /tmp/ioerror

リダイレクト演算子のみを使用して解決する方法はありますか?

答え1

を使用してくださいtee。ただし、標準エラー出力を取得するには、元のプログラムの標準エラーをリダイレクトする必要があります。 Pipe(|)は標準出力のみをパイプで接続するため、teeエラーファイルは空です。あなたが望むもの:

ls /etc /dvd /var 2> /tmp/ioerror | tee /tmp/ioutput 

画面でstderrとstdoutを表示するには、次のようにします。

ls /etc /dvd /var 2> >(tee /tmp/ioerror) | tee /tmp/ioutput 

これはまずstderrにリダイレクトされますtee /tmp/ioerror。つまり、画面に表示され、ファイルに保存されます。次に、stdoutをパイプしてtee /tmp/ioutput印刷され、ファイルに保存されていることを確認します。

関連情報