私はこの実験室の質問に答えようとしています。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
印刷され、ファイルに保存されていることを確認します。