LEXGROG(1)

이름
lexgrog - 맨 페이지의 헤더 정보를 해석합니다

개요
lexgrog [-m|-c] [-dfw?V] [-E 인코딩] file ...

설명
lexgrog 은(는) lex의 “groff guess” 유틸리티 기존 구현체입니다. 맨 페이지 원본 파일 또는 “cat” 페이지로 선 서식화 처리한 페이지로 명령행에서 파일 목록을 읽어들이며, apropos and whatis에서 나타내듯이 이름과 설명, 그리고 nroff 또는 troff 두 요소 모두에 전달하기 전 맨 페이지에서 필요한 전처리 필터 목록을 표시합니다.

입력 구성이 잘못됐을 경우, lexprog에서 “해석 실패” 를 출력합니다. 맨 페이지 정확성 검사가 필요한 외브 프로그램에 쓸만합니다. lexgrog의 입력 파일이 “-” 이면, 표준 입력을 읽습니다. 입력 파일이 압축 파일이면, 자동으로 압축 해제 후 읽습니다.

옵션

-d, --debug
    디버깅 정보를 출력합니다.

-m, --man
    입력을 맨 페이지 원본 파일로 해석합니다. --man 또는 --cat 둘 중 어느 하나라도 지정하지 않았을 경우 기본 동작입니다.

-c, --cat
    입력을 선 서식화 처리한 맨 페이지로 해석합니다(“cat pages”). --man 과 --cat 옵션은 동시에 쓸 수 없습니다.

-w, --whatis
    apropos 와 whatis에서 활용하듯 맨 페이지 헤더의 이름과 설명을 표시합니다. --whatis 또는 --filters 둘 중 어느 하나도 주어지지 않은 상태가 기본입니다.

-f, --filters
    nroff 또는 troff로 서식화 하기 전 전처리에 필요한 필터 목록을 표시합니다.

-E 인코딩, --encoding 인코딩
    페이지에 대해 예측한 문자셋 대신 인코딩 값을 활용합니다.

-?, --help
    도움말 메시지를 출력하고 나갑니다.

--usage
    간단한 사용법 메시지를 출력하고 나갑니다.

-V, --version
    버전 정보를 출력합니다.

종료 상태

0   프로그램 실행 성공.

1   사용법 오류.

2   lexgrog 에서 입력 파일 하나 이상 해석에 실패했습니다.

예제
  $ lexgrog man.1
  man.1: "man - an interface to the system reference manuals"
  $ lexgrog -fw man.1
  man.1 (t): "man - an interface to the system reference manuals"
  $ lexgrog -c whatis.cat1
  whatis.cat1: "whatis - display manual page descriptions"
  $ lexgrog broken.1
  broken.1: parse failed

WHATIS 해석
mandb(lexgrog와 동일한 코드를 활용함)는 문서로 기록한 특징의 이름과 설명을 찾으려 각 설명서 페이지 상단의 이름 섹션을 해석합니다. 해석 프로그램이 여태껏 활용해온 제각기 다른 문서 양식에 대응하느라 대부분 문제가 없지만, 필요한 정보 추출에 실패할 때도 있습니다.

전통 man 매크로 집합을 활용할 때, 올바른 이름 섹션은 다음과 같습니다:

        .SH NAME
        foo \- program to do something

일부 설명서 페이저에서는 정확히 나타난대로 ‘\-’ 옵션이 필요합니다. mandb에서는 어지간한 경우를 다 받아들이지만, 다른 시스템에서의 호환성에 있어서는 백슬래시를 붙여두는게 좋습니다.

좌측에는 쉼표로 구분한 몇가지 이름이 있습니다. 공백이 들어간 이름은 구성이 영 탐탁치 못한 몇가지 이름 섹션에서 이상한 동작을 막기 위해 무시합니다. 우측에는 자유로운 형태를 갖추며, 여러줄에 걸쳐 내용을 구성할 수도 있습니다. 동일한 설명서 페이지에 몇가지 기능에 대한 다른 여러가지 설명을 붙여넣었다면, 다음 구성을 갖춥니다:

        .SH NAME
        foo, bar \- programs to do something
        .br
        baz \- program to do nothing

(.PP와 같이 새 문단을 시작하는 매크로는 .br 강제 개행 매크로 대신 사용할 수 있습니다.)

BSD의 mdoc 매크로 세트를 활용한다면, 올바른 이름 섹션은 다음과 같습니다:

        .Sh NAME
        .Nm foo
        .Nd program to do something

WHATIS 해석에 실패하는덴 몇가지 보편적인 이유가 있습니다. 가끔 설명서 페이지 저자분들은 ‘.SH NAME’을 ‘.SH MYPROGRAM’과 같은 식으로 바꾸어, mandb에서 필요한 정보를 추출해야 하는 부분에서 섹션을 찾지 못하게 합니다. 때로는 이름 섹션을 넣지만 ‘name \- description’ 형식 대신 내용을 멋대로 임의로 넣습니다. 그러나, 위에서 재구성한 어떤 문법이든 따라야 합니다.

추가 참조
apropos(1), man(1), whatis(1), mandb(8)

참고
lexgrog 에서는 .so 요청이 들어간 파일을 해석하려 하지만, 파일을 설명서 페이지 계층 위치에 제대로 복사해 넣어야만 올바르게 수행할 수 있습니다.

저작자
맨 페이지를 검색할 때 lexgrog에서 활용하는 코드 작성자:

Wilf. (G.Wilford@ee.surrey.ac.uk).
Fabrizio Polacco (fpolacco@debian.org).
Colin Watson (cjwatson@debian.org).

Colin Watson은 이 맨 페이지와 같이 명령행 프론트엔드의 현재 형태를 작성했습니다.

버그
https://gitlab.com/man-db/man-db/-/issues
https://savannah.nongnu.org/bugs/?group=man-db