편집하다

편집하다

help 내장 명령에 대한 정보를 표시합니다. 도움의 원천은 무엇입니까? 내장 명령의 데이터베이스를 유지합니까, 아니면 각 내장 명령에 대해 일부 파일을 읽습니까(각 유틸리티의 맨페이지와 유사)?

때때로 나는 이것을 확장하는 것처럼 보이는 정보를 발견합니다.--help

$ cd --help
bash: cd: --: invalid option
cd: usage: cd [-L|[-P [-e]]] [dir]

$ help cd
cd: cd [-L|[-P [-e]]] [dir]
    Change the shell working directory.

    Change the current directory to DIR.  The default DIR is the value of the
    HOME shell variable.

    The variable CDPATH defines the search path for the directory containing
    DIR.  Alternative directory names in CDPATH are separated by a colon (:).
    A null directory name is the same as the current directory.  If DIR begins
    with a slash (/), then CDPATH is not used.

    If the directory is not found, and the shell option `cdable_vars' is set,
    the word is assumed to be  a variable name.  If that variable has a value,
    its value is used for DIR.

    Options:
        -L  force symbolic links to be followed
        -P  use the physical directory structure without following symbolic
        links
        -e  if the -P option is supplied, and the current working directory
        cannot be determined successfully, exit with a non-zero status

    The default is to follow symbolic links, as if `-L' were specified.

    Exit Status:
    Returns 0 if the directory is changed, and if $PWD is set successfully when
    -P is used; non-zero otherwise.

실행 파일의 도움말 섹션을 추출 하고 싶지만 helpPython 스크립트의 경우pdf-merge.py,이것은 아니다

$ help ./pdf-merge.py
bash: help: no help topics match `./pdf-merge.py'.  Try `help help' or `man -k ./pdf-merge.py' or `info ./pdf-merge.py'.

$ ./pdf-merge.py --help
usage: pdf-merge.py [-h] [-v] [--ask] [--output OUTPUT] [--title TITLE]
                    [--author AUTHOR] [--keyword KEYWORD] [--pdftk PDFTK]
                    [--gs GS] [--pdfmarks PDFMARKS] [--unicode]
                    PDF [PDF ...]

Merge PDFs preserving bookmarks. Thanks to Larry Cai for suggesting that
Unicode be supported and for discussion about the `--pdfmarks` option.

positional arguments:
  PDF                  an input PDF to merge

optional arguments:
  -h, --help           show this help message and exit
  -v, --version        show program's version number and exit
  --ask                pause for manual pdfmark tweaking
  --output OUTPUT      name of the output PDF
  --title TITLE        title of output PDF
  --author AUTHOR      author of output PDF
  --keyword KEYWORD    keywords for the output PDF
  --pdftk PDFTK        path to the pdftk executable
  --gs GS              path to the gs (Ghostscript) executable
  --pdfmarks PDFMARKS  path to pdfmarks file. If not given, a temporary file
                       is used. If given and the file is missing, execution
                       will stop after the file is created (before the
                       Ghostscript run). If given and the file exists, no
                       attempt will be make to use pdftk to generate the mark
                       file (I assume your input file is what you want).
  --unicode            instead of merging PDFs, convert PDF-formatted unicode
                       strings. For example `--unicode '<FEFF03B103B203B3>'
                       \u03b1\u03b2\u03b3`

답변1

help빌드 시 다른 bash 내장 기능의 세부 정보를 간단히 제공하는 bash 내장 기능입니다.

소스 코드는 help컴파일 타임에 생성되는 defbash 소스 트리의 내장 디렉터리에 있는 파일에서 생성됩니다 . 당신이 보면도움말 소스 코드 그리고cd이 정보는 $SHORT_DOC. 정보에 액세스하려면 help이름이 지정된 배열을 사용하세요 shell_builtins.

답변2

때로는 정보가 --help에 의해 확장되는 것처럼 보입니다.

help cd그리고 cd --help근본적인 차이점이 있습니다. help다른 명령에 대한 정보를 제공하는 셸에 내장된 명령입니다.쉘에 내장즉, 자체 실행 파일이 아니며 예를 들어 bash다음과 같은 기능입니다. 일부 내장 명령에는 독립 실행형 실행 버전도 있기 때문에 다소 혼란스러울 수 있습니다. 이 경우 일반적으로 자체 매뉴얼 페이지가 있으며 요청하면 실행 파일 경로를 공개합니다 which [command]. 매뉴얼 페이지 또는 [command] --help실행 파일의 정보, help [command]내장된 정보이지만 거의 동일할 것입니다. 내장 명령에 대해서만 매뉴얼 페이지를 찾으면 모든 내장 명령이 나열된 쉘 페이지를 얻을 수 있습니다.

--help(축약된 형식 포함 -h)은 실행 파일에 대한 명령줄 옵션에 대한 일반 레이블일 뿐입니다. 전부는 아니지만 많은 CLI 도구가 이를 구현하지만 제한되지 않으며 제공되는 정보는 전적으로 구현에 따라 다릅니다. --help내장 셸을 호출 하면 "잘못된 옵션"과 간단한 "사용법" 메시지가 나타날 수 있습니다. 이를 구현하지 않는 독립형 시스템에서 호출하면가능한"잘못된 옵션"도 표시되지만 정확한 상황은 응용 프로그램에 따라 다릅니다.

사용 가능한 명령의 내장 버전과 독립 실행형 버전이 있고 명령을 호출할 때 어떤 버전이 사용되었는지 알고 싶다면 type다른 내장 셸을 사용할 수 있습니다.

> help type
type: type [-afptP] name [name ...]
Display information about command type.

For each NAME, indicate how it would be interpreted if used as a
command name.
[...]

> which echo
/bin/echo

> type echo
echo is a shell builtin

echo여기서는 독립 실행형 실행 파일 이 있지만 echo쉘이 내장된 실행 파일을 호출하는 것을 볼 수 있습니다.

답변3

귀하는 자신의 질문에 답변했습니다.

nicolas@host:~$ help help
help: help [-s] [pattern ...]
    Display helpful information about builtin commands.  If PATTERN is
    specified, gives detailed help on all commands matching PATTERN,
    otherwise a list of the builtins is printed.  The -s option
    restricts the output for each builtin command matching PATTERN to
    a short usage synopsis.

도움말은 다른 내장 명령에 대한 정보를 얻는 데 사용되는 BUILTIN 명령(즉, bash 내부 명령)입니다. 스크립트의 세 번째 부분은 bash의 내장 명령이 아니기 때문입니다. 을 실행하고 use bash내장을 호출하면 다음을 얻게 됩니다.helpstrace

# strace bash -i -c "help cd"
---snip(long output)---
write(1, "cd: cd [-L|-P] [dir]\n"..., 21cd: cd [-L|-P] [dir]
) = 21
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2570, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f38b765c000
read(3, "# Locale name alias data base.\n# "..., 4096) = 2570
read(3, ""..., 4096)                    = 0
close(3)                                = 0
munmap(0x7f38b765c000, 4096)            = 0
open("/usr/share/locale/pt_BR/LC_MESSAGES/bash.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/pt/LC_MESSAGES/bash.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/bash.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(1, "    Change the current directory "..., 710    Change the current directory to DIR.  The variable $HOME is the
    default DIR.  The variable CDPATH defines the search path for
    the directory containing DIR.  Alternative directory names in CDPATH
    are separated by a colon (:).  A null directory name is the same as
    the current directory, i.e. `.'.  If DIR begins with a slash (/),
    then CDPATH is not used.  If the directory is not found, and the
    shell option `cdable_vars' is set, then try the word as a variable
    name.  If that variable has a value, then cd to the value of that
    variable.  The -P option says to use the physical directory structure
    instead of following symbolic links; the -L option forces symbolic links
) = 710
write(1, "    to be followed.\n"..., 20    to be followed.
) = 20
---snip(long output)---

이는 이 정보가 빌드 시 bash 바이너리에서 생성된다는 의미입니다.

답변4

나는 --help가 실행 파일의 일부이므로 거기에서 구현되어야 한다고 믿습니다. 그렇기 때문에 --help의 다양한 버전을 볼 수 있습니다. 때로는 -h 약어를 허용하고 다른 버전은 접두사 없이 "help"만 허용합니다.

편집하다

귀하의 질문 중 일부를 잘못 읽었습니다. 나는 "help" 명령 자체의 내부 작동 방식에 대해 잘 모릅니다.

관련 정보