Хіба `man ls> temp.txt`. Вихідний текстовий файл пошкоджений


27

Коли я виконую man ls > temp.txtвихідний текстовий файл, пошкоджений. Пошкодженим я маю на увазі, що перша і остання букви в деяких словах надмірно повторюються.

Кілька перших рядків у temp.txt:

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

NNAAMMEE
     llss -- list directory contents

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

DDEESSCCRRIIPPTTIIOONN

І так далі. Без перенаправлення man lsцілком нормально. Що відбувається?


Цікаво, що перегляд файлу за допомогою lessабо moreвідображення форматування правильно. Якщо ви використовуєте vim, він відображатиме необроблені backspaces ( ^H) із зайвими літерами.
Келвін

2
Ваші файли страждають від гикавки.
Cthulhu

Цікаво, що команда man на моєму комп'ютері Linux не веде себе так, коли вихід перенаправляється.
Девід Бейлі

Відповіді:


30

Від man man:

Щоб отримати звичайну текстову версію чоловічої сторінки, без зворотних пробілів і підкреслень, спробуйте

    # man foo | col -b > foo.mantxt

manроздруковує відформатовану версію чоловічої сторінки, підкреслення та подвійні літери аналізуються

Справа не стільки в тому, що вони 'розібрані', а скоріше "якщо у вас немає терміналу, сміливий формат повинен відображатися як повторний символ". Після того, як ви підключите його до терміналу (vt100, xterm, Terminal тощо), людина розпізнає термінал і надсилає відповідні контрольні коди, щоб зробити колір, жирний, підкреслити тощо. Його правильно розбирають - лише для нульового типу терміналу.

коментар MichaelT


21

Колись комп'ютери зазвичай підключалися до телетипів (телепринтерів), які друкували весь текст на папері в режимі реального часу, як він був отриманий. Хоча телепринтери не мали жодних можливостей для підкресленого або жирного тексту, виведення підкреслення, зворотний проміжок та друк чогось іншого призведе до того, що щось інше буде підкреслено. Аналогічно виведення символу, зворотна зміна та виведення того ж символу, як правило, роблять характер темнішим, хоча ефективність цього буде змінюватися залежно від якості встановленої стрічки (якщо стрічка була старою і слабкою, ввівши один і той же символ двічі зробило б його значно темніше; з новою стрічкою введення символу навіть одного разу досягне максимальної темноти). Крім того, навіть якщо користувач не був приєднаний до принтера,manдля спілера друку було б досить поширеним, що, ймовірно, пояснює, чому саме manтак поводитись, навіть коли вихід був перенаправлений.

BTW, на деяких принтерах (і навіть телепринтерах) продуктивність _←U_←N_←D_←E_←R_←L_←I_←N_←I_←N_←Gбуде помітно гіршою ___________←←←←←←←←←←←UNDERLINING, оскільки перша вимагає, щоб головка друку повторно змінювалась у зворотному напрямку (і, як правило, перевертала ціль на обох кінцях). Те саме було б і при використанні багатошарового жирного шрифту, але там поведінка насправді може бути вигідною, оскільки при першому друкуванні кожного символу негайно слідкує за символом зворотної області, а другий - ні. Якщо друкувальна голівка прискорювалась під час друку першого символу, це призвело б до її незначної вирівнювання відносно другого, що зробить ефект сміливого обличчя більш ефективним.


Чим більше я дізнаюся про Unix, тим більше виявляю, як він обтяжений зворотною сумісністю, як і Windows.
Сіюань Рен

Охайний урок історії! Чудово зрозуміти, чому певні методи можуть віддавати перевагу іншим.
Дастін Вілер

15

Відповідь Матеуша правильна, але варто зазначити, що замість того, щоб викреслювати форматування, призначене для TTT, ви можете мати чоловічий формат по-різному.

Наприклад, ви можете отримати добре відформатований pdf замість:

man -t ls | pstopdf -i -o ~/ls.pdf

Я використовую OnyX вже багато років, головним чином, щоб надрукувати сторінки моїх чоловіків, як це робиться. Не більше! Я напишу це в сценарій, який буде робити всі чоловічі сторінки в моїй системі. Величезне спасибі за це, що я давно відмовився шукати, чому я користуюся OnyX. Я дуже вважаю за краще робити такі речі з Терміналу і тепер можу.
користувач3439894

Приємна особливість. Чи є простий спосіб вивести HTML крім цього? gzip -dc $(man -w ls) | groff -Thtml -mandoc -c > /tmp/man-ls.html
Келвін

На сторінці сторінки для людини йдеться про те, що -tформати з groff -Tps ...і з запуску рядків на / usr / bin / man, що здається, жорстко закодовані. А оскільки -Tpsвідміняє GROFF_TYPESETTER, ваше рішення може бути найбільш життєздатним. Хоча вам не вистачає кроку у вашому трубопроводі. Ви хочете, щоб потім заграти. Спробуйте man -d lsпобачити трубопровід, який він використовує.
Тім Б

6

Як альтернатива, у мене визначена така функція оболонки (викликається з плагіна OS -my-ZSH OS X):

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

Це призводить до того, що потрібна сторінка "Man" відкриється у "Попередньому перегляді" з усім гарним форматуванням, яке можна побажати. Досить просто додати цей єдиний псевдонім до свого ~/.profile(я думаю pman, що простіше, ніж man-preview, тому я встановив alias pman='man-previewсвоє ~/.zshrc).

PS Я бачив pmanфункцію, визначену в різних точкових файлах по Інтернету, Oh-my-ZSH просто буває там, де визначено моє.


2

Або ви можете використовувати ManOpen від Carl Lindberg для пошуку та друку будь-якої чоловічої сторінки. ManOpen вперше був розроблений для NeXtStep і досі працює завдяки Карлу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.