Nguồn trợ giúp là gì?


8

help hiển thị thông tin về các lệnh dựng sẵn. Nguồn trợ giúp là gì? Liệu nó có duy trì một cơ sở dữ liệu cho các lệnh dựng sẵn hay nó đọc một số tệp của mỗi lệnh dựng sẵn (tương tự như trang của mỗi tiện ích)?

Đôi khi tôi thấy thông tin của nó dường như mở rộng điều đó bằng cách --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.

Tôi nghĩ helptrích xuất phần trợ giúp của tệp thực thi, nhưng đối với tập lệnh python pdf-merge.py , thì không

$ 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`

3
Chỉ cần làm rõ, cdkhông có --helptùy chọn. Những gì bạn đang thấy là thông điệp sử dụng cơ bản bạn nhận được khi cố gắng sử dụng cờ tùy chọn không hợp lệ.
terdon

Xem thêm manlệnh và trong các hệ thống hỗ trợ infolệnh đó.
keshlam

Câu trả lời:


19

help là một nội dung bash và nó chỉ cung cấp cho bạn các chi tiết của các nội dung bash khác từ thời gian xây dựng.

Nguồn cho helpđược tạo tại thời điểm biên dịch từ các deftệp trong thư mục dựng sẵn của cây nguồn bash. Nếu bạn nhìn vào mã nguồn trợ giúpcdbạn sẽ nhận thấy rằng thông tin là một phần của $SHORT_DOC. helpsử dụng một mảng được gọi shell_builtinsđể truy cập thông tin.


1
Bằng chứng khác:strings /bin/bash | grep 'Change the current directory to DIR'
200_success

12

Đôi khi tôi thấy thông tin của nó dường như mở rộng điều đó bằng cách - trợ giúp

help cdcd --helpvề cơ bản là khác nhau. helplà một lệnh được xây dựng trong shell và nó cung cấp thông tin về các lệnh khác được tích hợp vào shell , nghĩa là chúng không phải là các tệp thực thi của chính chúng, chúng là các tính năng của, ví dụ , bash. Điều này có thể hơi khó hiểu vì một số lệnh tích hợp cũng có các phiên bản thực thi độc lập. Trong trường hợp này, họ thường có trang hướng dẫn riêng và sẽ hiển thị đường dẫn thực thi nếu bạn yêu cầu which [command]. Thông tin trong trang man, hoặc từ [command] --helplà dành cho thực thi; thông tin từ help [command]là dành cho tích hợp, nhưng hy vọng chúng ít nhiều giống nhau. Nếu bạn tìm một trang man cho một lệnh chỉ có sẵn, bạn có thể sẽ nhận được một trang cho shell liệt kê tất cả các lệnh tích hợp sẵn của nó.

--help(bao gồm cả dạng ngắn -h) chỉ là nhãn thông thường cho tùy chọn dòng lệnh để thực thi. Nhiều, nhưng không phải tất cả, các công cụ CLI thực hiện điều này, nhưng chúng không bị ràng buộc và thông tin được cung cấp phụ thuộc hoàn toàn vào việc thực hiện. Nếu bạn gọi --helptrên trình bao có sẵn, bạn có thể nhận được "tùy chọn không hợp lệ" và thông báo "sử dụng" ngắn gọn. Nếu bạn gọi nó trên một độc lập không triển khai nó, bạn cũng có thể nhận được "tùy chọn không hợp lệ", nhưng chính xác những gì xảy ra một lần nữa phụ thuộc vào ứng dụng.

Nếu có cả phiên bản tích hợp và độc lập của một lệnh có sẵn và bạn muốn biết cái nào được sử dụng khi bạn gọi nó, bạn có thể sử dụng type, một vỏ khác tích hợp sẵn.

> 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

Ở đây chúng ta có thể thấy rằng mặc dù có một tệp thực thi độc lập echo, các lệnh echogọi shell của bạn là một tích hợp.


1
Không cần phải gõ typehai lần: type -a echotrả về tất cả các cuộc gọi echotrong phạm vi của bạn (như được xác định bởi $ PATH), bao gồm các nội trang, hàm shell và bí danh. Xem help typeđể tham khảo.
Tatjana Heuser

8

Bạn đã trả lời câu hỏi của riêng bạn:

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.

Trợ giúp là một lệnh BUILTIN (có nghĩa là, bash lệnh nội bộ) để lấy thông tin của các lệnh dựng sẵn khác. Vì kịch bản phần thứ ba này là lệnh bash dựng sẵn. Nếu bạn chạy bash, hãy gọi cho dựng sẵn helpmột cách sử dụng stracebạn sẽ nhận được:

# 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)---

Khá nhiều có nghĩa là thông tin này được tạo ra tại thời điểm xây dựng bên trong nhị phân bash.


Chúng không được mã hóa cứng nhưng được tạo vào thời gian xây dựng
Ulrich Dangel 11/07/14

cảm ơn. (1) Ý bạn là gì khi "gọi nội dung trợ giúp một bước sử dụng"? (2) thông tin sử dụng được mã hóa cứng trong lệnh thực thi của lệnh tích hợp cd?
Tim

@UlrichDangel - Cảm ơn bạn đã sửa lỗi. Mã hóa cứng liên quan đến một cái gì đó cố định trên mã nguồn và không nằm trong tệp nhị phân trong thời gian biên dịch. Xấu của tôi;) @Tim. stracelà một công cụ để xem một lệnh xác định đang làm gì trong khi thực thi (thư viện, cuộc gọi hệ thống, tệp được mở, v.v.). Phương pháp writecho thấy thông tin trợ giúp đến từ bên trong nhị phân (bash) trong khi sử dụng lệnh dựng sẵn trợ giúp chứ không phải mở tệp (như trang nam).

2

Tôi tin rằng - trợ giúp là một phần của việc thực thi, nó phải được thực hiện ở đó. Đó là lý do tại sao bạn thấy các phiên bản khác nhau của - trợ giúp, đôi khi -h tốc ký được cho phép, những phiên bản khác là "trợ giúp" không tiền tố

Biên tập

Tôi đọc sai một phần câu hỏi của bạn. Tôi không quen thuộc với bất kỳ hoạt động bên trong nào của lệnh "trợ giúp".


Làm thế nào để lệnh helptìm thông tin của lệnh khác?
Tim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.