Apakah `man ls> temp.txt`. Filefile keluaran rusak

27

Ketika saya menjalankan man ls > temp.txtfile teks output rusak. Maksud saya korup, huruf pertama dan terakhir dalam beberapa kata diulangi secara berlebihan.

Beberapa baris pertama di temp.txt:

LS(1)                     BSD General Commands Manual                    LS(1)

NNAAMMEE
     llss -- list directory contents

SSYYNNOOPPSSIISS
     llss [--AABBCCFFGGHHLLOOPPRRSSTTUUWW@@aabbccddeeffgghhiikkllmmnnooppqqrrssttuuwwxx11] [_f_i_l_e _._._.]

DDEESSCCRRIIPPTTIIOONN

Dan seterusnya. Tanpa redirection man lsadalah hal yang normal. Apa yang terjadi?

seeker_of_bacon
sumber
Menariknya, melihat file menggunakan lessatau moremenampilkan format dengan benar. Jika Anda menggunakan vim, itu akan menampilkan backspaces mentah ( ^H) dengan huruf tambahan.
Kelvin
2
File Anda menderita cegukan.
Cthulhu
Menarik, perintah man di komputer Linux saya tidak berperilaku seperti ini ketika output diarahkan.
David Bailey

Jawaban:

30

Dari man man:

Untuk mendapatkan versi teks biasa dari halaman manual, tanpa spasi mundur dan garis bawah, cobalah

    # man foo | col -b > foo.mantxt

mancetakan versi halaman buku yang diformat, garis bawah dan huruf ganda diuraikan

Ini tidak begitu banyak sehingga mereka 'diurai' tetapi lebih "jika Anda tidak memiliki terminal, format tebal harus ditampilkan sebagai karakter yang berulang". Setelah Anda menghubungkannya ke terminal (vt100, xterm, Terminal, dll ...), man mengenali terminal dan mengirimkan kode kontrol yang sesuai untuk melakukan warna, tebal, garis bawah dan sejenisnya. Yang diuraikan dengan benar - hanya untuk tipe terminal nol.

komentar oleh MichaelT

Mateusz Szlosek
sumber
21

Sekali waktu, komputer secara rutin terhubung ke teletype (teleprinters) yang akan mencetak semua teks di atas kertas secara real time saat diterima. Meskipun teleprinters tidak memiliki fasilitas untuk teks yang digarisbawahi atau dicetak tebal, mengeluarkan garis bawah, backspacing, dan mencetak sesuatu yang lain akan menyebabkan sesuatu yang lain tampak bergaris bawah. Demikian juga mengeluarkan karakter, backspacing, dan keluaran karakter yang sama akan cenderung membuat karakter tampak lebih gelap, meskipun efektivitas yang akan bervariasi tergantung pada kualitas pita yang dipasang (jika pita sudah tua dan lemah, mengetik karakter yang sama dua kali akan membuatnya secara signifikan lebih gelap; dengan pita baru mengetik karakter bahkan sekali akan mencapai mendekati kegelapan maksimum). Lebih lanjut, bahkan jika pengguna tidak terhubung ke printer,manke spooler cetak akan sangat umum, yang mungkin menjelaskan mengapa manakan berperilaku seperti itu bahkan ketika output dialihkan.

BTW, pada beberapa printer (dan bahkan teleprinter), kinerja _←U_←N_←D_←E_←R_←L_←I_←N_←I_←N_←Gakan terasa lebih buruk daripada ___________←←←←←←←←←←←UNDERLINING, karena yang pertama memerlukan printhead untuk berulang kali membalikkan arah (dan biasanya melampaui target di kedua ujungnya). Hal yang sama juga berlaku ketika menggunakan boldface multi-strike, tetapi perilaku itu sebenarnya bisa menguntungkan karena pertama kali setiap karakter dicetak akan segera mengikuti karakter backspace dan yang kedua tidak. Jika print head mengalami percepatan saat mencetak karakter pertama, itu akan menyebabkannya tidak sejajar sedikit ke yang kedua, membuat efek wajah-berani lebih efektif.

supercat
sumber
Semakin banyak saya belajar tentang Unix, semakin saya menemukan bagaimana ia dibebani dengan kompatibilitas mundur, seperti halnya Windows.
Siyuan Ren
Pelajaran sejarah yang rapi! Sangat bagus untuk melihat mengapa metode tertentu lebih disukai daripada yang lain.
Dustin Wheeler
15

Jawaban Mateusz benar, tetapi perlu menunjukkan bahwa alih-alih menghapus format yang dimaksudkan untuk tty, Anda dapat memiliki format man berbeda.

Misalnya, Anda bisa mendapatkan pdf yang diformat dengan baik dengan:

man -t ls | pstopdf -i -o ~/ls.pdf
Tim B
sumber
Saya telah menggunakan OnyX selama bertahun-tahun sekarang terutama untuk mendapatkan halaman manual saya dicetak seperti ini. Tidak lagi! Saya akan menulis ini menjadi skrip yang akan melakukan semua halaman manual di sistem saya. Terima kasih banyak untuk ini karena saya sudah lama sekali mencari alasan mengapa saya menggunakan OnyX. Saya lebih suka melakukan hal-hal seperti ini dari Terminal dan sekarang saya bisa.
user3439894
Fitur yang bagus. Apakah ada cara sederhana untuk membuat html selain ini? gzip -dc $(man -w ls) | groff -Thtml -mandoc -c > /tmp/man-ls.html
Kelvin
Halaman manual untuk man mengatakan bahwa -tformat dengan groff -Tps ...dan dari menjalankan string di / usr / bin / man, yang tampaknya hardcoded. Dan karena -Tpsmenimpa GROFF_TYPESETTER, solusi Anda mungkin yang paling layak. Meskipun Anda kehilangan satu langkah dalam pipa Anda. Anda ingin tbl lalu groff. Cobalah man -d lsuntuk melihat pipa yang digunakannya.
Tim B
6

Sebagai alternatif, saya mendefinisikan fungsi shell berikut (dipanggil dari plugin OS X Oh-my-ZSH ):

man-preview () {
    man -t "$@" | open -f -a /Applications/Preview.app
}

Ini menghasilkan halaman manual yang diinginkan dibuka di Pratinjau dengan semua format cantik yang diinginkan. Cukup mudah untuk menambahkan alias tunggal ini ke Anda ~/.profile(saya pikir pmanlebih mudah daripada man-preview, jadi saya sudah mengaturnya alias pman='man-previewdi saya ~/.zshrc).

PS Saya telah melihat pmanfungsi yang didefinisikan dalam berbagai file dot di internet, Oh-my-ZSH kebetulan berada di tempat milik saya didefinisikan.

Dustin Wheeler
sumber
2

Atau Anda dapat menggunakan ManOpen oleh Carl Lindberg untuk mencari dan mencetak halaman manual mana saja. ManOpen pertama kali dikembangkan untuk NeXtStep dan masih berfungsi berkat Carl.

Sunwolf
sumber