GNU/Linux >> Belajar Linux >  >> Linux

Cara mengarahkan output ke file dan stdout

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


Linux
  1. Cara Mengarahkan Output ke File dan Stdout di Linux

  2. Bagaimana Cara Mengarahkan Output Program Ke File Zip??

  3. Output Ke Stdout Dan Pada Saat Yang Sama Grep Ke File?

  1. Cara Mengarahkan Keluaran Program Dan Masih Melanjutkannya ke Stdout?

  2. Bagaimana Cara Mengarahkan Stderr Dan Stdout Ke File Yang Berbeda Dan Juga Ditampilkan Di Terminal?

  3. Redirect Dan Output Pipa?

  1. Apa perbedaan mengarahkan output menggunakan >, &>, >&dan 2&>?

  2. Bagaimana cara mengarahkan stderr dan stdout ke file berbeda di baris yang sama dalam skrip?

  3. Cara mengarahkan seluruh output dari spark-submit ke file