Saya menonton output dari perintah saya yang rumit dengan less
, masalahnya adalah stderr
hilang. stderr
baris biasanya terdaftar di antara stdout
baris di dalam less
. Saya ingin mereka dicetak di konsol, dan ketika saya keluar less
, untuk melihatnya bersama-sama.
Saya menyadari mungkin ada ada solusi untuk ini, saya membaca tentang tee
dan multitee
tapi tidak berhasil sejauh ini.
stderr
dialihkan kestdout
, semua outputstderr
akan dicampur dengan output normal aktifstdout
. Memipipkan output tersebut ke yangless
akan menampilkan keduanya.less
untuk mengecat ulang layar.Jawaban:
Mungkin
Tambahan
Berikut ini klarifikasi untuk orang-orang yang lalai untuk membaca pertanyaan dengan hati - hati dan yang tidak membaca komentar klarifikasi OP di atas.
haelix menunjukkan:
dan, dalam komentar untuk penjawab awal, menulis:
Masalahnya mungkin platform spesifik, itu pasti sesuatu yang saya alami pada platform Unix SVR4 yang lebih lama.
Jika, pada platform seperti itu, Anda melakukan sesuatu seperti
pesan kesalahan (mis. izin direktori) muncul seperti ini kurang
sehingga garis keluaran dikaburkan oleh pesan kesalahan.
Jika Anda me-refresh halaman, garis output ditampilkan dengan benar tetapi Anda kehilangan pesan kesalahan. Ketika Anda keluar lebih sedikit layar dibersihkan kecuali untuk prompt perintah.
Jika Anda melakukan sesuatu seperti
Pesan-pesan kesalahan bercampur dengan output standar. Sekali lagi ketika Anda keluar lebih sedikit, layar kosong.
Jika Anda ingin pertama hanya meneliti keluaran standar dalam waktu kurang, kemudian melihat pesan kesalahan setelah keluar lebih sedikit, Anda memerlukan solusi yang berbeda.
Itulah yang secara tentatif saya sarankan dalam jawaban saya yang asli, dua baris.
sumber
Anda harus mengarahkan ulang
stderr
kestdout
:Periksa manual untuk Anda shell (mis
man bash
.)sumber
katakan saja shell untuk mengarahkan ulang fd 2 ke fd 1 (stderr ke stdout)
sumber
Satu hal yang kurang dari semua jawaban sejauh ini adalah alasannya, mengapa ini terjadi. Masalahnya di sini adalah semacam ras-kondisi antara proses mengeluarkan barang ke
stderr
danless
menampilkan keluaran daristdout
pada terminal. Jikaless
mulai menampilkan setelah semua outputstderr
telah dicetak ke terminal, makaless
akan mempertahankan itu dan Anda dapat melihat pesan setelah keluarless
. OTOH jikaless
sudah mulai menampilkan hal-hal, maka pesan kesalahan bercampur denganless
output dan tidak ada yang dipertahankan setelahless
keluar (karenaless
hanya mempertahankan terminal seperti sebelum dimulai dan tidak tahu apa-apa tentang pesan kesalahan yang datang di antara).Anda dapat melihatnya dengan mudah, jika Anda melakukan mis
Semua pesan kesalahan "Izin ditolak" bercampur dengan
less
output dan tidak ada yang akan ada setelah Anda keluar. Jika kamu melakukansemua (atau paling tidak sebagian besar) dari pesan kesalahan telah dicetak ke terminal sebelum
less
mendapat kesempatan untuk menampilkan keluaran dan Anda akan melihat pesan kesalahan sesudahnya.Tentu saja, Anda biasanya tidak ingin menunggu 10 detik sebelum mulai
less
, tetapi dengan Linux Anda juga dapat menyediakan nilai fraksional untuk waktu tunggu, dan dengan proses yang berjalan cepat sering sesedikit mungkinsleep 0.1
untuk menghindari kondisi balapan. (Tapi, tentu saja, jika Anda ingin atau harus berada di sisi yang benar - benar aman, gunakan solusi RedGrittyBrick).sumber
Anda perlu memahami konsep "deskriptor file". Biasanya, aplikasi unix akan mulai dengan tiga deskriptor file khusus:
"Pipa"
|
di shell menghubungkanstdout
dari satu proses dengan prosesstdin
selanjutnya.Kesalahan - menurut desain - tidak diumpankan ke
stdin
proses selanjutnya. Mereka akan sering tidak masuk akal untuk aplikasi berikutnya, dan tidak boleh disembunyikan dari pengguna.Jika Anda ingin mencampur kesalahan menjadi stdout, Anda dapat menggunakan mis
2>&1
, yang pada dasarnya mengatakan "append stderr to stdout". Sebagai contohjuga harus menyertakan output kesalahan dari file yang tidak dapat diakses.
hanya akan memberi Anda kesalahan.
sumber
Saya bingung tentang pertanyaan Anda, sejauh yang saya tahu perilaku yang Anda inginkan adalah default.
Saat saya gunakan
untuk mendapatkan tes sederhana,
tidak hanya apa yang Anda minta. Begitu ya
di
less
danketika saya berhenti
less
sumber
echo info ; echo error 1>&2
) dan ulangi tes: kedua baris disalurkan menjadi kurang.Saya kebetulan mengalami masalah ini di salah satu Debian 5.0 saya baru-baru ini. misalnya, ls abc | sedikit saya menemukan bahwa pesan kesalahan masuk ke kurang, yang bertentangan dengan pengetahuan saya.
Setelah beberapa upaya, saya menemukan bahwa itu hanya sesuatu yang terkait dengan penyangga layar. stderr TIDAK masuk ke kurang sebenarnya. Anda dapat menggunakan tombol panah Atas atau Bawah (atau j / k) untuk menunjukkan.
sumber