Mari kita lihat beberapa kode contoh terlebih dahulu:
#include <stdio.h>
main()
{
// message 1, on stdout (using printf)
printf("%s", "message 1, on stdout (using printf)\n");
// message 2, on stdout (using fprintf)
fprintf(stdout, "%s", "message 2, on stdout (using fprintf)\n");
// message 3, on stderr (using fprintf)
fprintf(stderr, "%s", "message 3, on stderr (using fprintf)\n");
}
Mari kita bandingkan hasilnya:
./helloerror
+ file: tidak ada pesan; konsol: pesan 1,2,3;
./helloerror >error.txt
+ file: pesan 1,2; konsol: pesan 3;
./helloerror 2>&1 >error.txt
+ file: pesan 1,2; konsol: pesan 3;
+ sama dengan ./helloerror> error.txt
./helloerror >error.txt 2>&1
+ file: pesan 3,1,2; konsol: tidak ada pesan;
+ perhatikan urutan 3 pertama, lalu 1, lalu 2
./helloerror | tee error.txt 2>&1
+ file: pesan 1,2; konsol: pesan 3,1,2;
+ perhatikan urutan 3 pertama, lalu 1, lalu 2
./helloerror 2>&1 | tee error.txt
+ file: pesan 3,1,2; konsol: pesan 3,1,2;
Untuk menggunakan:
./helloerror >error.txt 2>&1
-> jika seseorang ingin semua (stdout + stderr) pesan dalam file, tetapi tidak pinted pada konsol
./helloerror 2>&1 | tee error.txt
-> jika seseorang ingin semua (stdout + stderr) pesan dalam file dan dicetak pada konsol
utility 2>&1 | tee output.log
, apakah Anda bermaksud mengatakan bahwa karena 1 diarahkan ke tee, 2 juga. Karena tee menduplikasi aliran, output ditampilkan pada konsol serta ditulis ke file? Karena itu perbedaan antarautility 2>&1 > output.log
danutility 2>&1 | tee output.log
adatee
di dalamnya duplikat aliran. Apakah itu benar?