`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원시 백 스페이스 ( ^H)가 표시 됩니다.
Kelvin

2
파일이 딸꾹질로 고통받습니다.
크 툴후

흥미롭게도 내 Linux 컴퓨터의 man 명령은 출력이 리디렉션 될 때 이와 같이 작동하지 않습니다.
David Bailey

답변:


30

보낸 사람 man man:

백 스페이스와 밑줄없이 일반 텍스트 버전의 매뉴얼 페이지를 얻으려면

    # man foo | col -b > foo.mantxt

man매뉴얼 페이지의 형식화 된 버전을 인쇄하고 밑줄과 이중 문자를 구문 분석합니다

너무 많이 구문 분석되지는 않지만 "터미널이없는 경우 굵은 체 형식은 반복되는 문자로 표시됩니다." 일단 터미널 (vt100, xterm, Terminal 등)에 연결하면 man은 터미널을 인식하고 색상, 굵은 체, 밑줄 등을 수행하기 위해 적절한 제어 코드를 보냅니다. null 터미널 유형에 대해서만 올바르게 구문 분석됩니다.

MichaelT의 코멘트


21

옛날 옛적에 컴퓨터는 일상적으로 텔레타이프 (텔레 프린터)에 연결되어 모든 텍스트를 종이에 실시간으로 인쇄합니다. 텔레 프린터에는 밑줄이 있거나 굵은 글씨로 된 텍스트를위한 기능이 없지만 밑줄을 출력하고 백 스페이스를 사용하고 다른 것을 인쇄하면 다른 부분에 밑줄이 생길 수 있습니다. 마찬가지로 캐릭터 출력, 백 스페이스 및 동일한 캐릭터 출력은 캐릭터가 더 어둡게 보이도록하지만 효과는 설치된 리본의 품질에 따라 달라집니다 (리본이 오래되고 연약한 경우 동일한 캐릭터를 두 번 입력하는 경우) 새로운 리본으로 문자를 한 번이라도 입력하면 최대 어두움에 가까워집니다). 또한 사용자가 프린터에 연결되지 않은 경우에도man인쇄 스풀러에 대한 출력은 꽤 일반적이었을 것입니다. 아마도 man출력이 리디렉션 될 때 왜 그런 식으로 작동하는지 설명합니다 .

BTW는 일부 프린터 (및 텔레 프린터)에서도 프린트 헤드가 프린트 헤드의 방향을 반복적으로 뒤집어 야하고 (일반적으로 양쪽 끝에서 목표를 초과하기 때문에 ) 성능 _←U_←N_←D_←E_←R_←L_←I_←N_←I_←N_←G이 현저히 떨어집니다 ___________←←←←←←←←←←←UNDERLINING. 멀티 스트라이크 볼드체를 사용할 때도 마찬가지이지만, 각 문자가 처음 인쇄 될 때 즉시 백 스페이스 문자를 따르고 두 번째 문자는 따르지 않기 때문에 동작이 실제로 유리할 수 있습니다. 첫 번째 문자를 인쇄하는 동안 프린트 헤드가 가속 된 경우 두 번째 문자에 비해 약간 정렬되지 않아 굵은 체 효과가 더 효과적입니다.


유닉스에 대해 더 많이 배울수록 Windows처럼 이전 버전과의 호환성에 더 많은 어려움을 겪습니다.
Siyuan Ren

깔끔한 역사 수업! 왜 특정 방법이 다른 방법보다 선호되는지 알 수 있습니다.
더스틴 휠러

15

Mateusz의 대답은 정확하지만 tty 용 형식을 제거하는 대신 사람 형식을 다르게 지정할 수 있음을 지적하는 것이 좋습니다.

예를 들어, 대신 다음과 같이 멋진 형식의 pdf를 얻을 수 있습니다.

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

나는 현재 매뉴얼 페이지를 인쇄하기 위해 몇 년 동안 OnyX 를 사용해 왔습니다 . 더 이상은 없어! 이것을 내 시스템의 모든 매뉴얼 페이지를 수행하는 스크립트로 작성하겠습니다. 내가 왜 OnyX를 사용하고 있는지 오래 전에 포기했을 때 이것에 대해 대단히 감사합니다. 나는 터미널에서 이와 같은 일을하는 것을 선호하며 지금은 할 수 있습니다.
user3439894

좋은 기능입니다. 이 외에도 HTML을 출력하는 간단한 방법이 있습니까? gzip -dc $(man -w ls) | groff -Thtml -mandoc -c > /tmp/man-ls.html
Kelvin

man에 대한 맨 페이지에서는 / usr / bin / man에서 문자열을 실행하거나 실행하지 않는 -t형식 groff -Tps ...이 하드 코딩 된 것으로 나타납니다. 그리고 이후 -Tps재정의 GROFF_TYPESETTER, 솔루션은 가장 실용적 일 수 있습니다. 파이프 라인에 단계가 누락되었지만 tbl 다음에 groff를 원합니다. man -d ls그것이 사용하는 파이프 라인을 보십시오 .
Tim B

6

대안으로, 나는 다음과 같은 쉘 함수를 정의했습니다 ( Oh-my-ZSH 의 OS X 플러그인 에서 호출 됨 ).

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

이로 인해 원하는 맨 페이지가 미리보기에서 열리고 원하는 모든 형식이 원하는 형식으로 표시됩니다. 이 단일 별칭을에 추가하는 것만 큼 쉽습니다 (보다 쉽다고 ~/.profile생각 하므로으로 설정 했습니다 ).pmanman-previewalias pman='man-preview~/.zshrc

추신 : 나는 pman인터넷의 다양한 도트 파일에 정의 된 기능을 보았습니다. 오 마이 ZSH는 내 것이 정의 된 곳에서 발생합니다.


2

또는 Carl Lindberg의 ManOpen을 사용하여 매뉴얼 페이지를 조회하고 인쇄 할 수 있습니다. ManOpen은 NeXtStep을 위해 처음 개발되었으며 Carl 덕분에 계속 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.