A discriminação entre curto e longo é apenas '-'?

3

Em Unix system, as opções começam com a opção - é curta, enquanto as opções começam com a opção -- is long. O meu entendimento está certo?

    
por Nan Xiao 26.01.2016 / 05:04

2 respostas

7

Isso faz parte dos padrões de codificação GNU, então todo o software GNU (e muitos não-GNU) o segue. No entanto, não é de forma alguma um padrão absoluto; existem outras maneiras de implementar isso, como:

  • -Wlong-option : originado do compilador C e especificado como tal em POSIX.
  • -long-option (ou seja, traço único): suportado pela maioria dos aplicativos (geralmente como uma alternativa à versão de traço duplo) que não tem opções curtas.
  • +long-option : isso está ficando fora de moda, mas há alguns pacotes de software mais antigos que reservaram o painel para opções curtas e o sinal de mais para opções longas. Não é muito usado hoje, principalmente porque a maioria das implementações getopt () não o suportam
  • long-option : infelizmente existem também algumas aplicações que confundem opções com argumentos . Acredito que a MegaCLI é um dos infratores (de qualquer maneira, é um delinquente).
por 26.01.2016 / 09:17
3

O método --long-opt é um GNUism que foi iniciado por volta de 1990.

Multics usa -long opções com um único traço e o projeto Multics foi iniciado na década de 1960.

UNOS é o primeiro UNIX clone (iniciado por um grupo de ex-funcionários da AT & T em 1980) e UNOS introduziu um analisador de opções generalizado (o primeiro no UNIX world) em abril de 1982. Esse analisador de opções oferece suporte a -long opções com um único traço.

AT&T introduziu getopt() entre 1983 e 1984, mas getopt() não foi reentrante antes de uma quarta variável global adicional ter sido introduzida em 1989 para o getopts da Bourne Shell.

POSIX implementa operandos que se parecem com opções longas com um único traço com test e find

AT&T UNIX introduziu -long opções usando um único traço em torno de 1983, permitindo, por exemplo kill -INT <pid> .

tar e ar não usaram o termo option em sua documentação, mas usaram o termo keyletter . Mais tarde, os implementadores adicionaram suporte a um - keyletter que é ignorado, dando a impressão de que y CLI pode se parecer com outros comandos do UNIX.

dd usa um modelo de opção próprio, mas esse modelo de opção é compatível com o modelo de opção longa de UNOS , que define opções longas para o seguinte formato:

  • -long
  • -long arg
  • long=arg
  • -long=arg
  • long= arg
  • -long= arg

O analisador da opção UNOS é superior à implementação do GNU longopt, pois usa uma cadeia de formatação que permite converter automaticamente argumentos inteiros e booleanos, e permite implementar funções de retorno de chamada para a opção eny, se desejado. Não há necessidade de reordenar a lista de argumentos por causa da interface da função de retorno de chamada.

A implementação do Solaris getopt() suporta opções longas como aliases para opções curtas desde 2004, mas realmente não documenta isso, embora fosse utilizável pelo Bourne Shell via getopts(1) desde que foi introduzido.

O Schily Bourne Shell documenta esse recurso e, além disso, introduziu mais getopt() de aprimoramentos que permitem opções longas que não são apenas aliases para uma opção curta e que permitem opções longas de traço único.

Veja o link na seção de comandos internos para getopts.

Um analisador de opções modernizado e aprimorado baseado nas idéias do analisador da opção UNOS está nas ferramentas schily em libschily/getargs.c

link

é usado nos programas da ferramenta schily que não são baseados no código AT & T e resulta em menos problemas com nomes de opções definidas infelizes, como em mkisofs

    
por 26.01.2016 / 15:09