help
отображает информацию о встроенных командах. Каков источник помощи? Поддерживает ли он базу данных для встроенных команд или читает некоторые файлы каждой встроенной команды (аналогично man-странице каждой утилиты)?
Иногда я нахожу, что его информация расширяет --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.
Я подумал help
извлечь справочную часть исполняемого файла, но для сценария Python 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`
cd
не имеет--help
выбора. То, что вы видите, - это базовое сообщение об использовании, которое вы получаете при попытке использовать недопустимый флаг опции.man
команду и в системах, которые ее поддерживают,info
команда.Ответы:
help
является встроенным в bash, и предоставляет вам только подробности о других встроенных bash из времени сборки.Источник для
help
генерируется во время компиляции изdef
файлов во встроенных каталогах дерева исходных текстов bash. Если вы посмотрите на исходный код справки, иcd
вы заметите, что информация является частью$SHORT_DOC
.help
использует массив, вызываемыйshell_builtins
для доступа к информации.источник
strings /bin/bash | grep 'Change the current directory to DIR'
help cd
иcd --help
принципиально разные.help
это команда, встроенная в оболочку, и она предоставляет информацию о других командах, встроенных в оболочку , то есть они не являются собственными исполняемыми файлами, а являются, например, функциямиbash
. Это может немного запутать, поскольку некоторые встроенные команды также имеют автономные исполняемые версии. В этом случае у них обычно есть своя собственная страница справочника, и, если вы спросите, они предоставят путь для исполняемого файлаwhich [command]
. Информация в справочной странице или из[command] --help
предназначена для исполняемого файла; информация отhelp [command]
встроенного, но, надеюсь, они более или менее одинаковы. Если вы ищете страницу руководства для команды, которая является только встроенной, вы, вероятно, получите страницу для оболочки, в которой перечислены все ее встроенные команды.--help
(включая краткую форму-h
) - это просто условная метка для параметра командной строки исполняемого файла. Многие, но не все, инструменты CLI реализуют это, но они не связаны, и предоставляемая информация полностью зависит от реализации. Если вы вызываете--help
встроенную оболочку, вы, скорее всего, получите «недопустимый параметр» и краткое сообщение «использование». Если вы вызываете его в автономном режиме, который его не реализует, вы также можете получить «недопустимую опцию», но то, что произойдет снова, зависит от приложения.Если доступны как встроенная, так и автономная версии команды, и вы хотите знать, какая из них используется при ее вызове, вы можете использовать
type
другую встроенную оболочку.Здесь мы видим, что, хотя существует отдельный исполняемый файл
echo
,echo
ваша оболочка вызывает встроенную функцию.источник
type
дважды:type -a echo
возвращает все вызовы вecho
пределах вашей досягаемости (как определено $ PATH), включая встроенные функции, функции оболочки и псевдонимы. Смотритеhelp type
для справки.Вы уже ответили на свой вопрос:
Справка - это команда BUILTIN (значит, внутренняя команда bash) для получения информации о других встроенных командах. Так как этот третий скрипт не является встроенной командой bash. Если вы запустите
bash
, вызовите встроенноеhelp
использование, котороеstrace
вы получите:В значительной степени это означает, что эта информация генерируется во время сборки внутри двоичного файла bash.
источник
cd
?strace
это инструмент для просмотра действий определенной команды во время выполнения (библиотеки, системные вызовы, открытые файлы и т. д.). Методwrite
показывает, что справочная информация поступает из двоичного файла (bash) при использовании встроенной команды help, а не при открытии файла (например, man-страницы).Я считаю, --help является частью исполняемого файла, он должен быть реализован там. Вот почему вы видите разные версии --help, иногда -h разрешены сокращения, другие - это «без префикса» «помощь»…
редактировать
Я неправильно понял часть вашего вопроса. Я не знаком с какой-либо внутренней работой самой команды «помощь».
источник
help
находит информацию другой команды?