긴 매뉴얼 페이지 읽기 및 검색


32

에 대해 읽고 싶은 때 드디어 쳤고 배쉬read그것의 -s와 옵션 man bash. 나는 (라인 4500의 주위에) 결국 정확한 지점을 찾았지만 모두 이후는 평소와 같이 좌절했다 /read심지어 /\s-s\s검색이 너무 많은 경기가있다.

그래서 질문은 : 긴 매뉴얼 페이지를 효율적으로 읽거나 다른 방법으로 로컬 에서 동일한 정보를 얻는 방법은 무엇입니까? 구체적인 예로 read -s pwd쉘 스크립트를 본 후 관련 문서를 얻는 방법 은 무엇입니까? 좋은 답변은 쉘 스크립트 스니 펫일 수도 있고, 읽기에 적합한 지점을 찾는 데 도움이되는 한, 일부 툴에 대한 힌트와 툴 사용 방법 또는 그 밖의 툴일 수도 있습니다.

참고 : 맨 페이지 읽기에 관한 질문이 있기 때문에 태그를 지정하지 않습니다 .


나는 이것이 당신의 요구 사항을 벗어날 수 있기 때문에 대답으로하지는 않지만 긴 man페이지 를 읽을 필요가있을 때 작은 스크립트를 사용하여 상단 패널에 남겨 둡니다. yuugian.com/demo/gkman.txt 공유하고 즐기십시오
Yuugian

나도 답변으로 이러는 아니에요)가에 대해 참으로이기 때문에 bash그 자체 : 당신처럼 나도 대부분 필요 SHELL BUILTINS라인에 대한에있는 설명서의 일부, 3500 . 그래서 이것을 알면 다음에을man bash 입력 66%하고 PgDn을 몇 번 입력하여 66 % 줄어 듭니다 . "Route 66" 으로 외울 수 있기 때문에 66을 선택했지만 실제로는 전화 번호의 시작이 아닌 경우 외우기가 쉽지는 않지만 실제로는 그 이상입니다. #) 적어도 "Route 66 "는 보편적이며 전 세계적으로 알려져 있습니다.
syntaxerror

답변:


33

Bash 내장에 대한 도움을 빨리 받으려면 다음을 사용하십시오 help.

help read

당신이 원하는 것입니다.

맨 페이지와 같은 형식의 경우

help -m read

또는 더 나은

help -m read | less

매뉴얼 페이지에서 여전히 그것을 찾고 있다고 주장하면 명령 설명에 빠르게 도달하는 것이 무엇인지 알게됩니다.

/^\s*read [[]

이것은 명령이 처음 설명 될 때 이름이 행의 시작 부분에서 약간 들여 쓰기되기 때문에 작동합니다. 의 특별한 경우 read에는 실제 read문서 를보기 전에 약간의 브라우징이 필요합니다 (명백한 이유로) "읽기"라는 단어가 매뉴얼 페이지 전체에서 많이 반복되기 때문입니다. [[]는 일반적으로 선택적 매개 변수보다 앞에 나오는 [와 일치 함을 의미합니다. (보통 / ^ \ s *를 제외하고 간단히 / <built-in command> [[])

다른 대안

형식 변경이 마음에 들지 않으면 매뉴얼 페이지를 DVI 또는 PDF 파일로 변환 할 수 있습니다.

man -T dvi bash >bash.dvi

또는

man -T ps bash | ps2pdf - bash.pdf # Requires the Ghostscript suite for ps2pdf

물론, DVI 또는 PDF 문서가 제공되면 텍스트 검색을 쉽게 수행 할 수 있습니다.


흠, 그것은 help훌륭하다. 내가 어떻게 들어 본 적이 없는지 궁금하다 ps2pdf. 어떤 종류의 인덱스도 만들 수 없기 때문에 그다지 유용하지 않다.
hyde

@hyde 인덱스를 생성하여 무슨 뜻인지 잘 모르지만 ptx에 대해 들어 보셨습니까 ?
Joseph R.

색인 또는 목차에서 "ptx"는 내가 의도 한 것과 정확히 일치합니다.
hyde

1
더 간단한 또 ​​다른 대안은 'man bash> bashman.txt'를 수행하는 것입니다. 그런 다음 텍스트 편집기의 (다른) 창에서 bashman.txt를 열고 원하는 명령을 찾기 위해 모든 명령을 사용할 수 있습니다. 파일을 편집하여 가장 자주 참조하는 섹션에 태그를 추가 할 수도 있습니다. bashman.txt를 읽기 전용으로 설정하면 편집기에서 실수로 수정하지 않아도됩니다.
Joe

원하는 브라우저에서 매뉴얼 페이지를 열고 모든 도구를 사용할 수도 있습니다. askubuntu.com/questions/339255/…
Joe

9

접근법 1

man bash그런 /read \[다음/-s

접근법 2

당신은라는 명령 줄 인수 설명하기위한 오픈 소스 도구를 시도 할 수 explainshell을 .

로컬로 사용할 수 있습니다. https://github.com/idank/explainshell에서 설명서를 읽으십시오.

주의 사항 : 일반적으로 작동하지만 Ubuntu의 맨 페이지 저장소에있는 명령으로 만 작동

귀하의 경우 -s스위치가 인식되지 않습니다 read -s pwd.

접근법 3

유망한 것처럼 보이지만 내 시스템에서는 작동하지 않는 다른 도구를 찾았습니다.

설명 : 유닉스 명령어를위한 간단한 문서


접근법 1 을 사용하면 (공백으로 검색하면 얻을 수 없는와 같은 문자열을 찾는 동안) /-s\b와 같은 적중을 피할 수 있습니다 . --some-other-command-s,/-s
David Knipe

8

이 경우 일반적으로하는 일은 그냥 run man, SHELL BUILTIN COMMANDS제목을 검색 한 다음 내장을 검색하는 것입니다.

man bash
/^SHELL BUILTIN
/  read 

그러나 bash에서는 할 수 있습니다

help read

또는 시스템에 따라

man 1 read
man bash-builtins

일반적 he으로이 작업을 수행 하는 스크립트 ( "짧은 도움말")가 있습니다. 다음과 같이 실행하십시오.

he bash read

참고로 이름 desc을으로 변경 했습니다 he. github.com/mikelward/scripts/blob/master/he
Mikel

3

매뉴얼 페이지에서 정보를 찾는 일반적인 방법은 없습니다. 책에서 정보를 찾는 일반적인 방법보다 더 그렇습니다. 찾고있는 내용에 따라 다릅니다.

쉘 내장에 대한 정보를 찾을 때 들여 쓰기를 위해 줄 저장의 시작 부분에서 내장을 검색 한 다음 공백을 검색하십시오 ^ *read␣(예 : type /^ *read␣ Enter) ( is space). 이것은 대시, pdksh, mksh 및 bash와 함께 작동합니다. Zsh의 매뉴얼 페이지가 분할되어 있으므로 zshbuiltins매뉴얼 페이지 를 읽어야합니다 . Ksh93에는 일부 내장 이름 앞에 특수 기호가 있으므로 ^ *†*␣UTF-8 또는 ^ *-*␣ASCII 로 검색해야합니다 . 허위 긍정이 몇 가지 있지만 이것은 올바른 줄로 빨리 갈 것입니다. 검색 ^ *read($| [-[])하면 오 탐지 양이 줄어 듭니다.

호출기에게 가고 싶은 곳을 알려 주면 검색 속도를 높일 수 있습니다. 예를 들어 내장 PAGER='less "+/^ *read \["' man bash에 대한 설명에서 bash 매뉴얼 페이지를 엽니 다 read. 이것을 기능으로 만들 수 있습니다.

man-builtin () {
  PAGER="less '+/^ *$1(\$|\\[|-)'" man ${SHELL##*/}
}

에서 mksh맨 페이지 / read (두 개의 공백, 명령 이름, 하나 개의 공간) 일반적으로 정확한 지점 (이것은 나 자신을 사용하는 트릭, 그리고 타입으로 빠르게) 찾습니다. 그것에 대해 문의 해 주셔서 감사합니다. 내 TODO에 mksh에 포함 된 모든 유틸리티에 대해 별도의 참조를 작성합니다.
mirabilos

1
@mirabilos / read 는 남자 구현이 텍스트를 정당화 할 때 많은 오탐을 하는 경향이 있습니다.
Gilles 'SO- 악마 그만해'

동의했다. 내장 문서를 실제로 분리해야 할 더 많은 이유.
mirabilos

1

bash 맨 페이지의 SHELL BUILTINS COMMANDS 섹션으로 직접 이동하려면 $HOME/.bash_aliases파일에 다음 별칭을 정의 합니다.

alias man-builtin="man -P 'less -p ^SHELL\ BUILTIN\ COMMANDS' bash"

0

다른 대안을 제공하기 위해 현재 페이지를 쉽게 검색 할 수있는 웹 브라우저를 선호하는 경우 freeBSD.org에서 사용되는 man.cgi 와 같은 것을 사용하여 다른 시스템의 매뉴얼 페이지를보고 방법을 볼 수 있습니다 그들은 다릅니다. 다른 사이트에서도 비슷한 것을 보았으므로 다른 변형이있을 것으로 예상합니다.

apropos 아래의 도움말 링크는 매뉴얼 페이지 모음을 다운로드 할 수있는 링크와 함께 자신의 서버에 넣을 스크립트 사본을 얻을 수있는 정보를 제공합니다.


0

목적을 위해 bash 함수를 만들었습니다. 이 스 니펫은 예를 들어 다음 끝에 붙여 넣을 수 있습니다 ~/.bashrc.

manfind() {
  # required args
  test "$1" -a "$2" || return 1                  

  # create temp file and get its name
  local tmp=$(mktemp /tmp/manfindXXXXXX) || return 1
  ( # subshell for trap
    trap "rm $tmp" EXIT

    # grep all matching lines with line numbers and pipe them to dialog
    if man "$1" |                   # get the whole man page
      grep -n "^\s*$2" |            # grep for the search string, with line nums
      sed 's/:/\n/' |               # replace line num separator with newline for dialog
      cut -c-70  |                  # cut long lines to nice length
      xargs -d'\n' -n 999999 \
        dialog --output-fd 3 --menu "Select line to go to" 0 0 0 3>$tmp -- 1 '(start of man page)'
    then
      # selected line number is now in $tmp, get man page and
      # use vim in read only mode to view it at right line
      man "$1" | vim -R +"$(< $tmp)" -
    else
      # cancel selected from dialog
      exit 1
    fi
  )
}

의견은 그것이하는 일에 대해 조금 설명합니다. 기본 검색 문자열은 특히 초기 공백을 건너 뛰고 줄의 시작 부분에서 단어를 검색합니다. 예 :

# find every line which starts with 'read' followed by space
manfind bash 'read '
# research bash subshells
manfind bash '.*subshell'

참고 :이 스크립트에는 매뉴얼 페이지 섹션의 개념이 없습니다. 나중에 조정해도되지만 man의MANSECT 환경 변수를 설정 하면 도움이됩니다.


2
임시 파일을 정리하기 위해 트랩을 추가 할 수 있습니다.trap 'rm -f "$tmp"'
l0b0

1
이것은 매우 복잡해 보입니다. 스크립트가하는 일을 완전히 읽지 못했지만 man "$1" | vim -R - "+/$2"비슷한 일을하지 않겠습니까?
Gilles 'SO- 악마 그만해

@Gilles I의 첫 번째 항목으로 이동합니다 $2.
hyde

@ l0b0 사용하도록 정리가 변경되었습니다 trap. 서브 쉘을 만들지 않고 함수에서 깔끔한 방법을 찾지 못했습니다.
hyde

@hyde 물론 정규식을 당신이하고있는 것에 적응 시키십시오. 내 요점은 사용에 대한이었다+/REGEX
질 'SO-정지 존재 악마'를

0

여기 다른 토론에서 나온 부분을 정리하면 .bashrc내장 기능으로 직접 이동할 수있는 빠른 기능이 있습니다 . 그렇지 않으면 man정상적으로 열립니다 .

man() {
    case "$(/bin/bash -c 'type -t '"$1")" in 
        builtin)
            LESS=+?"^       $1 " command -p man bash
            ;;
        *)
            command -p man $@
            ;;
    esac
}

0

Linux 배포판 info bash에서 정보가 매뉴얼 페이지와 동일한 작업 유형별로 별도의 단락을 원할 경우 사용할 수 있어야 합니다.

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