Qual é a ordem correta para colocar flags e parâmetros em um programa CLI [closed]?

0

Tenho notado que alguns programas funcionam de maneira diferente quando os sinalizadores são usados antes dos parâmetros de entrada, em vez de adicionar as sinalizações no final. Então eu quero saber, qual é a maneira convencionalmente aceita para ordenar parâmetros e flags em um programa do Ubuntu CLI.

Estou especificamente perguntando sobre o Ubuntu, pois esta é a minha plataforma de preocupação. Eu entendo que isso depende do programa sendo executado, mas qual é a norma?

Por exemplo:

./myprog -d file.txt

Vs

./myprog file.txt -d
    
por john 09.04.2016 / 10:13

3 respostas

4

Não há ordem correta, pois varia de programa para programa. O sistema operacional apenas passa os argumentos da linha de comando para o programa na ordem em que são fornecidos. A maneira como eles são analisados depende do programa ou das bibliotecas de análise usadas.

Na maioria dos casos, a ordem não importa e as bibliotecas de análise comuns, como getopt ou argparse do Python, permitem a análise independente de ordem. Mas outros programas podem ser mais exigentes. Observe também que, mesmo com a análise independente da ordem, você ainda tem argumentos dependentes da ordem. O que significa que algumas opções devem ser seguidas por um argumento:

 ls --sort time -l

O time aqui é um argumento para a opção --sort e, portanto, deve vir depois dele. No entanto, a ordem de --sort time e -l não importa. Muitos programas permitem escrever --sort=time para tornar isso mais explícito, mas nem todos fazem isso.

O projeto GNU tem um padrão de codificação para tratamento de linha de comando e a maioria dos suas ferramentas seguem isso, mas não é algo que você possa confiar.

Nos casos em que a ordem é importante, você geralmente usa ./myprog -d file.txt e também parece melhor nos scripts de shell. O estilo de escrita ./myprog file.txt -d é mais para a linha de comando quando você acabou de digitar a coisa e deseja adicionar um -d , mas não o cursor até o meio da linha.

    
por Grumbel 09.04.2016 / 12:53
2

Até onde eu vi, não há convenção. Se você está desenvolvendo um programa / script, cabe a você decidir como o pedido deve ser tratado. Por exemplo, o comando find emitirá um aviso se eu colocar o argumento relacionado ao diretório após o argumento relacionado à nomenclatura.

$ find /etc -iname "passwd" -maxdepth 1
find: warning: you have specified the -maxdepth option after a non-option argument -iname, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.

/etc/passwd

Outros programas podem não se importar com o pedido. Eu tenho um script getopts.sh simples que eu mantenho para quando eu preciso usar argumentos de linha de comando em outro script, e analisa argumentos em nenhuma ordem particular

$ getopts.sh  test1 -w1 test2                                                 
Hello, I'm main
The arguments are  test1 -w1 test2
    
por Sergiy Kolodyazhnyy 09.04.2016 / 16:23
1

Convenções e recomendações POSIX são aquelas opções (coisas com -) precedem argumentos / operandos (todo o resto). É a suposição mais segura.

link

    
por covener 09.04.2016 / 17:53