help
affiche des informations sur les commandes intégrées. Quelle est la source d'aide? Maintient-il une base de données pour les commandes intégrées ou lit-il certains fichiers de chaque commande intégrée (semblable à la page de manuel de chaque utilitaire)?
Parfois, je trouve que ses informations semblent --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.
Je pensais help
extraire la partie d'aide de l'exécutable, mais pour un script python pdf-merge.py , ce n'est pas
$ 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
n'a pas d'--help
option. Ce que vous voyez est le message d'utilisation de base que vous obtenez lorsque vous essayez d'utiliser un indicateur d'option non valide.man
commande, et dans les systèmes qui la prennent en charge, lainfo
commande.Réponses:
help
est une commande bash intégrée et ne vous fournit que les détails des autres commandes bash de buildtime.La source de
help
est générée au moment de la compilation à partir desdef
fichiers des répertoires intégrés de l'arborescence des sources bash. Si vous regardez le code source de l'aide etcd
vous remarquerez que les informations font partie de$SHORT_DOC
.help
utilise un tableau appeléshell_builtins
pour accéder aux informations.la source
strings /bin/bash | grep 'Change the current directory to DIR'
help cd
etcd --help
sont fondamentalement différents.help
est une commande intégrée dans la coque, et il fournit des informations sur d' autres commandes qui sont intégrés dans la coque , ce qui signifie, ils ne sont pas executables de leur propre, ils sont caractéristiques, par exemple,bash
. Cela peut devenir un peu déroutant car certaines commandes intégrées ont également des versions exécutables autonomes. Dans ce cas, ils ont généralement leur propre page de manuel et exposeront un chemin exécutable si vous le demandezwhich [command]
. Les informations de la page de manuel ou de[command] --help
sont destinées à l'exécutable; les informationshelp [command]
sont pour le intégré, mais j'espère qu'elles sont plus ou moins les mêmes. Si vous recherchez une page de manuel pour une commande qui n'est qu'une fonction intégrée, vous obtiendrez probablement une page pour le shell répertoriant toutes ses commandes intégrées.--help
(y compris la forme courte-h
) n'est qu'une étiquette conventionnelle pour une option de ligne de commande pour un exécutable. De nombreux outils CLI, mais pas tous, l'implémentent, mais ils ne sont pas liés et les informations fournies dépendent entièrement de l'implémentation. Si vous appelez--help
sur un shell intégré, vous obtenez probablement une "option non valide" et un bref message "d'utilisation". Si vous l'invoquez sur une version autonome qui ne l'implémente pas, vous pouvez également obtenir une «option non valide», mais ce qui se produit à nouveau dépend de l'application.S'il existe des versions intégrées et autonomes d'une commande et que vous souhaitez savoir laquelle est utilisée lorsque vous l'invoquez, vous pouvez utiliser
type
un autre shell intégré.Ici, nous pouvons voir que bien qu'il existe un exécutable autonome
echo
, leecho
shell que vous invoquez est intégré.la source
type
deux fois:type -a echo
renvoie tous les appels àecho
votre portée (comme défini par $ PATH), y compris les fonctions intégrées, les fonctions shell et les alias. Voirhelp type
pour référence.Vous avez déjà répondu à votre propre question:
L'aide est une commande BUILTIN (signifie, commande interne bash) pour obtenir des informations sur d'autres commandes intégrées. Puisque ce script de troisième partie n'est pas une commande intégrée de bash. Si vous exécutez
bash
, appelez le builtinhelp
etstrace
vous obtiendrez:Cela signifie à peu près que ces informations sont générées au moment de la construction à l'intérieur du binaire bash.
la source
cd
?strace
est un outil pour voir ce qu'une commande déterminée fait pendant son exécution (bibliothèques, appels système, fichiers ouverts, etc.). La méthodewrite
montre que les informations d'aide proviennent de l'intérieur du binaire (bash) lors de l'utilisation de la commande intégrée help, et non de l'ouverture d'un fichier (comme une page de manuel).Je pense que --help fait partie de l'exécutable, il doit y être implémenté. C'est pourquoi vous voyez différentes versions de --help, parfois le raccourci -h est autorisé, d'autres c'est "l'aide" non préfixée…
Éditer
J'ai mal lu une partie de votre question. Je ne connais pas le fonctionnement interne de la commande "help" elle-même.
la source
help
trouve-t-elle les informations d'une autre commande?