Por exemplo,
[fakename]$ type echo
echo is a shell builtin
Mas man echo
me dá a versão GNU coreutils do echo
. Qual é a maneira mais fácil de saber se a página de manual que estou olhando é a correta, ou seja, aquela para o utilitário que eu obteria se a invocasse diretamente?
Você não, realmente. Não sem conhecimento externo à página de manual.
No caso de
echo
(eprintf
, etest
, ...), geralmente é um shell embutido, então você precisará saber disso e ler a documentação do shell. (Eecho
é notoriamente diferente em diferentes implementações, use .printf
)Na maioria, se não em todos os shells, você pode descobrir se algo está embutido com , por exemplo , imprimirá . ( é especificado pelo POSIX mas, por exemplo , o fish também o suporta, por mais não-POSIXy que seja.) No Bash , você leria então a documentação online ou usaria o comando interno (que é específico do Bash e do qual você precisa saber existe).
type command
type echo
echo is a shell builtin
type
man bash
help
Mesmo que o comando não seja um built-in, é possível que existam vários comandos com o mesmo nome,
rename
sendo um exemplo famoso (veja Por que o utilitário de renomeação no Debian/Ubuntu é diferente do de outras distribuições, como CentOS? ). Agora, seu sistema operacional deve ter a página de manual correta para o utilitário realmente instalado e, por exemplo, no Debian, o sistema de "alternativas" atualiza as páginas de manual correspondentes também quando as alternativas de comando são alteradas. Mas se você ler uma página de manual online , precisará estar ciente disso.Muitos utilitários têm uma opção de linha de comando, como a
--version
que pode informar qual é a implementação desse comando. (Mas nem quase todos os utilitários o têm. Eu acho que é um GNUism originalmente, então os utilitários GNU o têm, assim como aqueles que por acaso copiaram o costume.) No caso derename
, isso funciona para diferenciar duas implementações diferentes:Além disso, seu sistema pode ter um alias ou uma função com o mesmo nome de um utilitário, geralmente para modificar o comportamento do utilitário. Nesse caso, os padrões apresentados em uma página de manual podem não se aplicar. Os aliases para
ls
são comuns, assim como os aliases que adicionam-i
arm
oumv
. Mastype foo
também diria sefoo
é um alias ou função.Se você quiser o manual de um comando interno, precisará consultar o manual do seu shell. O comando será documentado nele, juntamente com todos os outros comandos internos (ou haverá pelo menos uma referência de onde a documentação para internos pode ser encontrada).
bash
:man bash
ou de um shellhelp echo
interativo .bash
zsh
:man zsh
(e depois de um pouco de leitura,man zshbuiltin
)fish
:man fish
(e depois de um pouco de leitura,help echo
)O manual que você obtém para
man echo
documentos/bin/echo
, ou seja, o comando externo .echo
Este comando não é o que você usaria quando usasseecho
sem um caminho explícito.Deve ser possível invocar a versão não interna do shell fornecendo o caminho completo (que você pode obter com
which echo
). Não há páginas de manual separadas para internos do shell; para documentação sobre aqueles que você deseja procurar na página de manual do seu shell. O comando "type" que você mencionou acima é a melhor maneira de descobrir qual você obterá.Como o comando sobre o qual você deseja obter informações é um shell embutido, digitar
help <command name>
o mesmo shell fornecerá a entrada de ajuda correta:Alternativamente, você pode digitar
man bash
(ou qualquer shell que esteja usando) e encontrar o built-in que estava procurando.Infelizmente, não há uma maneira fácil de verificar se uma página de manual corresponde totalmente ao comando que você deseja executar. Obter a página "certa" é mais complicado do que parece, pois isso dependerá de muitos fatores, como o caminho completo do comando, variáveis de ambiente e aliases, e é tecnicamente impossível
man
levar em conta todos esses fatores. No entanto, após um curto período de tempo, você deve desenvolver uma compreensão geral de onde procurar ajuda.Se eu fosse descrever um algoritmo geral para obter a documentação correta na maioria dos *nices modernos, seria algo assim:
type <command>
diz que é built-in)?help <command>
ouman <shellname>
sehelp
não estiver disponível em seu shell.man <command>
(ouman <section> <command>
se houver várias entradas em diferentes seções, consulteman man
a lista de seções)info <command>
/usr/share/doc/<package name>
se há documentação adicional no pacote, como páginas HTML.-h
ou--help
, supondo que o comando seja confiável. Muitas vezes, isso fornecerá um breve resumo do que ele faz e informará onde você pode encontrar mais informações.mas devo reiterar, tudo isso se tornará "natural" à medida que se passa algum tempo com o sistema operacional.
man
é dividido em seção:Dependendo do que você procura você pode invocar
man
assim para evitar confusão:man section command
.Para obter mais informações, você pode realmente usar
man man
Se a distribuição do seu sistema operacional não tiver páginas de manual para esses programas que mencionam as diferenças, você deve fazer um relatório de bug.
Na verdade, essa é a tarefa dos criadores da distro, mas se você digitar:
você obterá a saída se
cmdname
for um shell embutido. Se você souber qual shell está usando, poderá executar:substituindo
shellname
pelo nome do seu shell. A página man do seu shell deve conter informações sobre comandos internos.Deixe-me dar um exemplo de como um UNIX amigável deve documentar isso: http://schillix.sourceforge.net/man/man1/test.1.html