Por que meu ls --help não funciona?

4
Marias-MacBook-Air:~ marias$ ls --help

ls: illegal option -- -

usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
    
por Stephen Kitt 02.06.2015 / 20:59

2 respostas

8

A versão ls no Mac OS X é baseada em BSD ls e não suporta opções de formato longo, incluindo --help . Consulte a a ls manpage ou a man ls no seu sistema para detalhes.

    
por 02.06.2015 / 21:02
5

Comandos diferentes suportam estilos de opções diferentes. As principais tendências são:

  • getopt() : getopt () é uma API de programação de 30 anos para analisar as opções. Está amplamente disponível e é o único padrão POSIX.

    Ele suporta apenas opções de letras únicas, algumas das quais podem receber argumentos. Várias opções podem ser combinadas para maior brevidade.

    Exemplo: tail -fn -2 : uma opção sem argumento ( -f ) seguida por -n que recebe um argumento de -2 (também pode ser escrito tail -fn-2 ou tail -f -n -2 ). -- é usado para marcar o final das opções.

  • XrmParseCommand() : (80's) pediu instância de XtOpenApplication() .

    A API usada por aplicativos X11 tradicionais (leia old-style hoje em dia). Lá, as opções são argumentos únicos, geralmente e tradicionalmente -option (ou +option ).

    As opções podem receber argumentos, mas não podem ser combinadas como getopt() (mesmo que sejam definidas como opções de letra única como -d por um curto para -display ).

  • GNU getopt_long . (final dos anos 80). O GNU estendeu a API getopt() para adicionar suporte a opções longas de maneira compatível.

    O GNU é a origem dessas --long opções e a razão pela qual elas são muito comuns nos sistemas GNU e não tanto em outros lugares.

    Lá, você tem dois tipos de opções: longa e curta. Os longos são --foo . Aqueles que aceitam argumentos podem ser escritos em --foo=arg ou --foo arg .

    Outra extensão são as opções que podem, opcionalmente, receber argumentos ( -o ou -oarg , --opt ou --opt=arg ), embora a variante curta não permita passar um argumento vazio. Opções longas também podem ser abreviadas. Como em vez de --help , você pode passar --he ou --h (desde que seja a única opção que começa com h ). A análise de opção GNU também permite a interligação de argumentos opcionais e não opcionais (embora -- ainda possa ser usado para marcar o final das opções).

    O estilo GNU de opções está se tornando um novo padrão, com a maioria das linguagens tendo uma API para analisá-las (às vezes com o conjunto de recursos completo, às vezes com extensões).

  • O oeste selvagem: agora muitos aplicativos fazem a análise de suas opções manualmente ou usam bibliotecas menos comuns que possuem outra sintaxe. A menos que eles procurem conformidade com um padrão, não há nada que os impeça de fazer o que quiserem. E, claro, alguns comandos não aceitam opções.

Agora, se algum comando tem alguma opção para imprimir uma mensagem de ajuda ou de uso, também fica totalmente a critério do redator do aplicativo.

Muitos aplicativos imprimem uma mensagem uso quando uma opção não é reconhecida (para os comandos que recebem opções). Alguns podem imprimir uma mensagem em -h , -? , -help , --help , --usage , --long-help ...

Agora, chamar um comando com um argumento aleatório, sem saber o que isso pode fazer, é um negócio perigoso. -h pode ser para ajuda ou qualquer outra coisa. Por exemplo shutdown -h é para h alt o sistema. -help seria curto para -h -e -l -p (ou -h -e lp ou -h elp como em --host=elp ...) para um comando que usa getopt() ou getopt_long() ...

Se você sabe que um comando aceita opções, uma aposta relativamente segura é -? ou -: . Em um shell:

cmd -\?
cmd -:

Para a getopt() API, os : e ? têm um significado especial, por isso, é improvável que sejam opções válidas. Em seguida, você recebe uma mensagem de erro que pode lhe dar uma dica sobre a opção válida para obter ajuda, se possível.

$ xterm -:
xterm: bad command line option "-:"

usage:  xterm [-/+132] [-C] [-Sccn] [-T string] [-/+ah] [-/+ai] [-/+aw]
[...]

Type xterm -help for a full description.
$ dd -:
dd: invalid option -- ':'
Try 'dd --help' for more information.
$ ls -:
ls: illegal option -- :
usage: ls -1RadCxmnlogrtucpFbqisfL [files]

Não funciona com todos os comandos.

Em qualquer caso, sua melhor aposta é tentar man primeiro, como já mencionado.

Cuidado com o fato de que alguns comandos são embutidos no shell (tente type the-command para descobrir), então a documentação para eles será encontrada no manual do seu shell.

Esse geralmente não é o caso de ls .

    
por 20.08.2015 / 17:20