Perintah yang Anda inginkan bernama tee
:
foo | tee output.file
Misalnya, jika Anda hanya peduli tentang stdout:
ls -a | tee output.file
Jika Anda ingin menyertakan stderr, lakukan:
program [arguments...] 2>&1 | tee outfile
2>&1
mengalihkan saluran 2 (stderr/standard error) ke saluran 1 (stdout/standard output), sehingga keduanya ditulis sebagai stdout. Itu juga diarahkan ke file keluaran yang diberikan pada tee
perintah.
Selanjutnya jika ingin menambahkan ke file log, gunakan tee -a
sebagai:
program [arguments...] 2>&1 | tee -a outfile
$ program [arguments...] 2>&1 | tee outfile
2>&1
membuang aliran stderr dan stdout.tee outfile
mengambil aliran yang didapat dan menuliskannya ke layar dan ke file "outfile".
Ini mungkin yang dicari kebanyakan orang. Kemungkinan situasinya adalah beberapa program atau skrip bekerja keras untuk waktu yang lama dan menghasilkan banyak keluaran. Pengguna ingin memeriksa kemajuannya secara berkala, tetapi juga ingin keluaran ditulis ke file.
Masalahnya (terutama saat mencampur aliran stdout dan stderr) adalah ada ketergantungan pada aliran yang dibilas oleh program. Jika, misalnya, semua penulisan ke stdout tidak memerah, tetapi semua penulisan ke stderr adalah memerah, maka mereka akan keluar dari urutan kronologis di file keluaran dan di layar.
Ini juga buruk jika program hanya menampilkan 1 atau 2 baris setiap beberapa menit untuk melaporkan kemajuan. Dalam kasus seperti itu, jika keluaran tidak dibilas oleh program, pengguna bahkan tidak akan melihat keluaran apa pun di layar selama berjam-jam, karena tidak ada keluaran yang akan didorong melalui pipa selama berjam-jam.
Pembaruan:Program unbuffer
, bagian dari expect
paket, akan memecahkan masalah buffering. Ini akan menyebabkan stdout dan stderr untuk segera menulis ke layar dan file dan menjaganya tetap sinkron saat digabungkan dan dialihkan ke tee
. Misalnya:
$ unbuffer program [arguments...] 2>&1 | tee outfile
Cara lain yang berhasil bagi saya adalah,
<command> |& tee <outputFile>
seperti yang ditunjukkan dalam manual gnu bash
Contoh:
ls |& tee files.txt
Jika '|&' digunakan, kesalahan standar perintah1 , selain keluaran standar , terhubung ke input standar perintah2 melalui pipa; ini adalah singkatan dari 2>&1 |. Pengalihan implisit dari kesalahan standar ke keluaran standar ini dilakukan setelah setiap pengalihan yang ditentukan oleh perintah.
Untuk informasi selengkapnya, rujuk pengalihan