$ program [arguments...] 2>&1 | tee outfile
2>&1
membuang aliran stderr dan stdout.
tee outfile
mengambil aliran yang didapatnya dan menulisnya ke layar dan ke file "outfile".
Ini mungkin yang dicari kebanyakan orang. Situasi yang mungkin terjadi adalah beberapa program atau skrip bekerja keras untuk waktu yang lama dan menghasilkan banyak output. Pengguna ingin memeriksanya secara berkala untuk mengetahui perkembangannya, tetapi juga ingin keluarannya ditulis ke file.
Masalahnya (terutama ketika mencampur aliran stdout dan stderr) adalah bahwa ada ketergantungan pada aliran yang disiram oleh program. Jika, misalnya, semua menulis ke stdout yang tidak memerah, tapi semua menulis ke stderr yang memerah, maka mereka akan berakhir keluar dari urutan kronologis dalam file output dan pada layar.
Ini juga buruk jika program hanya menghasilkan 1 atau 2 baris setiap beberapa menit untuk melaporkan kemajuan. Dalam kasus seperti itu, jika output tidak memerah oleh program, pengguna bahkan tidak akan melihat output di layar selama berjam-jam, karena tidak ada yang akan didorong melalui pipa selama berjam-jam.
Pembaruan: Program unbuffer
, bagian dari expect
paket, akan menyelesaikan masalah buffering. Ini akan menyebabkan stdout dan stderr untuk menulis ke layar dan file segera dan tetap sinkron ketika digabungkan dan dialihkan ke tee
. Misalnya:
$ unbuffer program [arguments...] 2>&1 | tee outfile