`buruh pelabuhan log foo | less` tidak dapat dicari atau digulir tetapi `buruh pelabuhan log foo 2> & 1 | less` adalah

10

Menggunakan salah satu memberikan teks yang dapat dibaca. Tetapi hanya dengan pengarahan stderr dapat satu gulir atau ketik / somepattern dan mendapatkan kecocokan.

Tanpa itu pencarian memberi "Tidak ada untuk mencari (tekan RETURN)" dan kolom ~ 's.

Mengingat, stderr dan stdout tidak sama tetapi mengapa kurang menunjukkannya sampai saya mulai melakukan sesuatu dalam waktu kurang?

Ini mungkin beberapa hal aneh multi-jendela vim yang saya tidak mengerti. Pikiran?

Jendela Ajaib
sumber

Jawaban:

7
+--------------------+        +------+       +----------+
|             stdout |·······→| less |——————→|          |
| somecommand        |        +------+       | terminal |
|             stderr |——————————————————————→|          |
+--------------------+                       +----------+

Jika somecommandmencetak teks ke kesalahan standar saja, maka ketika Anda menjalankan somecommand | less, somecommanddan lesskeduanya ditampilkan ke terminal. Output dari perintah pada stderrnya tidak akan less, itu akan langsung ke terminal, karena tidak diarahkan. Pertama-tama output dari somecommandgulungan dengan kurang menginisialisasi dan menunjukkan baris promptnya; maka ketika somecommandselesai pemberitahuan kurang bahwa inputnya selesai (karena pipa ditutup). Anda mungkin ingin bereksperimen sedikit: jalankan

{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }

dan variasi waktu tidur untuk somecommandmenghasilkan keluaran sebelum atau sesudah kurang siap dan untuk melihat apa yang terjadi ketika pipa ditutup.

Gilles 'SANGAT berhenti menjadi jahat'
sumber