
grep을 사용하여 특정 매뉴얼 페이지 내에서 검색을 시도하면 '불쾌한' 메시지가 여러 개 표시됩니다.
예를 들어:
man mpv | grep dvdnav
결과는 다음과 같습니다.
mpv dvdnav://[longest|menu|title][/device] [options]
grotty:<standard input> (<standard input>):90690: character above first line discarded
grotty:<standard input> (<standard input>):90694: character above first line discarded
grotty:<standard input> (<standard input>):90698: character above first line discarded
grotty:<standard input> (<standard input>):90702: character above first line discarded
grotty:<standard input> (<standard input>):91895: character above first line discarded
grotty:<standard input> (<standard input>):91899: character above first line discarded
grotty:<standard input> (<standard input>):91903: character above first line discarded
grotty:<standard input> (<standard input>):91907: character above first line discarded
grotty:<standard input> (<standard input>):94450: character above first line discarded
grotty:<standard input> (<standard input>):94454: character above first line discarded
grotty:<standard input> (<standard input>):94458: character above first line discarded
│dvdnav:// │ dvdnav://menu │
이러한 메시지의 원인은 무엇이며 이를 방지하려면 어떻게 해야 합니까?
답변1
나는 설치하지 않았지만 mpv
이것은 아마도 호환되지 않는 매뉴얼 페이지에서 나오는 경고 grotty
(맨 페이지 소스를 처리하여 표준 출력으로 인쇄하는 프로그램)에 더 가깝습니다. 시도해 보셨나요?
man mpv 2> /dev/null | grep dvdnav
? 이렇게 하면 오류와 경고가 grotty
싱크로 리디렉션되므로 더 깔끔한 출력을 얻을 수 있습니다.
mpv
그럼에도 불구하고 해당 오류는 아마도 매뉴얼 페이지(또는 grotty
알 수 없는 ) 의 버그일 것입니다 .
답변2
나는 이것이 매뉴얼 페이지 텍스트 포맷터의 버그로 인해 발생했다고 확신합니다.
[업데이트: 또한 참조이것~을 참조하여 대답하다벌레보고서.]
man grotty
말한다,
grotty는 GNU troff의 출력을 타자기와 같은 장치에 적합한 형식으로 변환합니다.
이것을 디버깅하려면먼저 (graphical roffer)를 사용하여 이 매뉴얼 페이지를 표시할 수도 있는지 확인하십시오 groffer
.
이러한 오류가 발생했을 때 Groffer는 오류 없이 잘 작동했지만 grotty는 '첫 번째 줄 위의 문자가 삭제됨' 오류를 발생시켰습니다.
그래서 좀 더 깊게 파봤습니다. 저에게 문제를 일으켰던 페이지는 zoneminder.1이었습니다.
먼저 압축을 풀었습니다.
gunzip -k zoneminder.1.gz
그런 다음 이것을 사용하여 테스트를 실행할 수 있습니다.
man -l man.1 | grep jksffjsd #-l means man the local file, i.e. produce error messages
이제 분할 및 정복으로 zoneminder.1을 편집하세요. 먼저 마지막 1/2을 삭제하고 오류가 사라졌습니다. 그런 다음 마지막 3/4만 삭제했는데 오류가 계속 발생했습니다. 그런 다음 마지막 5/8을 삭제했는데 오류가 계속 발생했습니다. 그런 다음 그것을 살펴보고 오류가 켜짐에서 꺼짐으로 전환될 때까지 한 번에 몇 줄을 제거하기 시작했습니다.
나는 테이블에 있는 것을 발견했고 테이블에서 일부 전체 항목만 삭제할 수 있었습니다(아래 이미지 참조).
내가 발견한 것은 이 테이블이 엉망이라는 것이었습니다.하지만 다음 페이지로 넘쳤을 때만, 여기에 표시된 대로:
테이블에서 항목을 하나 더 제거하면 오류가 사라집니다.
그러니 그냥 무시하는 것이 옳습니다.
grotty에서 버그로 신고할 수 있는지 살펴보겠습니다.
답변3
5년이 넘었습니다. 알아요. 하지만 다른 사람이 같은 문제에 직면하고 있다면 저는 다음과 같은 질문에 대답했습니다. 아주 간단하게: grep을 사용하여 매뉴얼 페이지에서 옵션을 검색하는 방법은 무엇입니까?
$ man ls | grep -- '--a'
-a, --all
-A, --almost-all
--author
결과를 하이픈으로 시작하는 줄로 좁히려면 다음을 수행하세요.
grep '^[[:space:]]*-' –
테스트 실행:
$ man shutdown | grep -- '-' | grep '^[[:space:]]*-'
--help
-H, --halt
-P, --poweroff
-r, --reboot
-h
-k