help
exibe informações sobre comandos internos. Qual é a fonte da ajuda? Ele mantém um banco de dados para comandos internos ou lê alguns arquivos de cada comando interno (semelhante à página de manual de cada utilitário)?
Às vezes, acho que suas informações parecem expandir isso --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.
Eu pensei em help
extrair a parte de ajuda do executável, mas para um script python pdf-merge.py , não é
$ 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ão tem uma--help
opção. O que você vê é a mensagem de uso básico que você recebe ao tentar usar um sinalizador de opção inválido.man
comando e nos sistemas que o suportaminfo
.Respostas:
help
é um bash builtin e fornece apenas os detalhes de outros bash builtins desde o momento da construção.A origem de
help
é gerada em tempo de compilação a partir dosdef
arquivos nos diretórios internos da árvore de origem do bash. Se você olhar o código fonte da ajuda ecd
perceberá que as informações fazem parte$SHORT_DOC
.help
usa uma matriz chamadashell_builtins
para acessar as informações.fonte
strings /bin/bash | grep 'Change the current directory to DIR'
help cd
ecd --help
são fundamentalmente diferentes.help
é um comando embutido no shell e fornece informações sobre outros comandos que são embutidos no shell , ou seja, eles não são executáveis por si mesmos, são recursos de, por exemplobash
,. Isso pode ficar um pouco confuso, pois alguns comandos internos também possuem versões executáveis independentes. Nesse caso, eles geralmente têm sua própria página de manual e expõem um caminho executável, se você perguntarwhich [command]
. As informações na página do manual ou from[command] --help
são para o executável; as informações dehelp [command]
são para o built-in, mas espero que sejam mais ou menos iguais. Se você procurar uma página de manual para um comando que seja apenas um interno, provavelmente obterá uma página para o shell listando todos os seus comandos internos.--help
(incluindo o formato abreviado-h
) é apenas um rótulo convencional para uma opção de linha de comando para um executável. Muitas, mas não todas, as ferramentas CLI implementam isso, mas elas não estão vinculadas e as informações fornecidas dependem completamente da implementação. Se você invocar--help
um shell interno, provavelmente receberá "opção inválida" e uma breve mensagem de "uso". Se você invocá-lo de forma independente que não o implementa, também poderá receber uma "opção inválida", mas exatamente o que acontece novamente depende do aplicativo.Se houver versões internas e independentes de um comando disponíveis e você quiser saber qual é usado quando o chama, você pode usar
type
outro shell interno.Aqui podemos ver que, embora exista um executável independente
echo
, oecho
seu shell chama é um built-in.fonte
type
duas vezes:type -a echo
retorna todas as chamadas aoecho
seu alcance (conforme definido por $ PATH), incluindo builtins, funções de shell e aliases. Vejahelp type
para referência.Você já respondeu sua própria pergunta:
Help é um comando BUILTIN (significa, bash comando interno) para obter informações de outros comandos internos. Como esse script da terceira parte não é um comando interno do bash. Se você executar
bash
, chame o builtin dehelp
uso questrace
você receberá:Praticamente significa que essas informações são geradas no momento da construção dentro do binário do bash.
fonte
cd
?strace
é uma ferramenta para ver o que um determinado comando está fazendo durante a execução (bibliotecas, chamadas do sistema, arquivos abertos etc.). O métodowrite
mostra que as informações de ajuda vêm de dentro do binário (bash) enquanto você usa o comando help builtin, e não da abertura de um arquivo (como uma página de manual).Eu acredito que --help faz parte do executável, tem que ser implementado lá. É por isso que você vê versões diferentes de --help, às vezes -h abreviação é permitida, outras é a "ajuda" não prefixada…
Editar
Eu li mal parte de sua pergunta. Não estou familiarizado com nenhum dos trabalhos internos do próprio comando "ajuda".
fonte
help
encontra as informações de outro comando?