Bagaimana saya bisa menggunakan sihir BASH untuk mencapai ini?
Saya hanya ingin melihat output stderr di layar,
tetapi saya ingin stdout dan stderr ditulis ke file.
Klarifikasi:
Saya ingin stdout dan stderr berakhir di file yang sama. Dalam urutan terjadinya.
Sayangnya tidak ada jawaban di bawah ini yang melakukan hal ini.
Jawaban yang Diterima:
Bahkan tanpa pengalihan apa pun, atau hanya dengan >logfile 2>&1
, Anda tidak dijamin melihat keluaran dalam urutan pembuatan.
Sebagai permulaan, stdout dari aplikasi akan buffer-line (ke tty) atau buffered (ke pipa) tapi stderr unbuffered, sehingga hubungan antara urutan output rusak sejauh menyangkut pembaca. Tahap selanjutnya dalam saluran apa pun yang dapat Anda buat tidak akan mendapatkan akses yang dipesan secara deterministik ke dua aliran (mereka secara konseptual adalah hal-hal yang terjadi secara paralel, dan Anda selalu tunduk pada penjadwal – jika pada saat pembaca Anda mendapatkan sepotong, penulis sudah ditulis ke kedua pipa, Anda tidak bisa membedakan mana yang lebih dulu).
"[T]ia memesan mereka terjadi" hanya benar-benar diketahui aplikasi. Pengurutan output di stdout/stderr adalah masalah – klasik, mungkin – yang terkenal.