é cada opção de comando da CLI uma abreviação semântica [closed]

2

A chave é sobre semântica.

curl -I , que significa curl --head , me intrigou. Eu não sei o que significam as palavras semânticas do alfabeto I ? É apenas uma referência, em vez de uma abreviação de uma palavra semântica? Da mesma forma, curl -b , que significa curl --cookie , tem a mesma pergunta confusa.

Alguém pode deixar claro como o inventor faz tal projeto no começo? Os exemplos acima significam que as opções não precisam ser semânticas?

    
por PageYe 08.09.2017 / 04:03

1 resposta

2

À primeira vista, pareceu-me que isso não era responsável, a não ser dizer que não, opções que parecem sem sentido sempre podem ser encontradas. Você pode fazer seu próprio programa que deliberadamente tenha opções totalmente sem sentido. (É claro que, mesmo assim, você poderia dizer que eles são significativos em sua falta de sentido, se eles foram deliberadamente escolhidos para serem sem sentido.)

Após uma análise mais aprofundada, percebi que a ambiguidade do significado de uma opção ser semântica é, na verdade, uma parte importante e útil de como as opções de linha de comando são nomeadas e curl -I é um caso particularmente ilustrativo disso.

Como diz o muru , as opções não tem para ser semântico. Mas a curl ' -I opção é semântica. Em curl (1) :

-i/--include
        (HTTP) Include the HTTP-header in the output. The HTTP-header includes things like server-name, date of the document, HTTP-version and more...

-I/--head
       (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature the command HEAD which this uses to get nothing but the header of a document. When used on a FTP or FILE file, curl displays the file size and last modification time only.

-i é a forma abreviada de --include , fazendo com que o cabeçalho HTTP seja incluído. Embora -I seja a forma abreviada de --head , é semanticamente a forma mais strong de -i , enquanto -i fornece o cabeçalho HTTP, -I fornece > somente o cabeçalho HTTP.

Isso oferece uma visão da sua questão maior: existem muitos critérios diferentes com os quais alguém pode julgar se um nome de opção é semântico. Quando uma opção é semântica, pode ser intencional ou não intencional. Se você está interessado apenas em saber se existe ou não alguma maneira de lembrar a opção como se fosse semântica, então sim, você sempre pode inventar uma razão para que o nome se relacione com o seu significado.

p>

Algumas opções são semânticas em mais de uma maneira. Você pode fazer o GNU grep mostrar linhas adjacentes a linhas correspondentes com -A para após , -B para antes e -C para contexto que fornece os dois. Assim, as formas curtas das três opções -A / --after-context , -B / --before-context e -C / --context , que são muito próximas uma da outra em significado, também estão próximas umas das outras o alfabeto. Isso é semântico?

Para continuar com isso e obter uma resposta rigorosa, você pode pesquisar padrões aplicáveis, como POSIX.1-2008 . Parece extremamente implausível que proíba opções sem nome, mas suponho que você tenha que ler atentamente a coisa toda para ter certeza. Uma pesquisa superficial não revela qualquer exigência de que as opções significam alguma coisa. Em particular, estas diretrizes oficiais - necessárias apenas para comandos cuja documentação declara conformidade com eles - recomende várias restrições sobre como as opções podem ser nomeadas e o efeito de transmiti-las, mas elas não mencionam nada que possa ser interpretado como um requisito ou recomendação de que os nomes das opções fazem sentido. Mesmo que você tenha encontrado alguma coisa, muitos sistemas semelhantes ao Unix não têm como objetivo a total conformidade com POSIX ...

Mas toda essa linha de pensamento - consultar fontes oficiais para determinar se (os fornecedores têm que fingir que) o nome de cada opção significa alguma coisa - é meio bobo. O que é realmente útil saber sobre opções é que seus nomes podem se relacionar de várias maneiras. Eles podem ser nomeados após palavras, depois de outras opções ou por proximidade alfabética com outras opções. Às vezes são apenas uma letra (ou numeral) que por acaso estava disponível. Pensar nessas maneiras pode ajudá-lo a lembrar de opções, encontrar opções ao pesquisar páginas da Web e tomar boas decisões sobre quais nomes de opções seus próprios scripts ou programas devem tomar.

Como nota final, é bom ter em mente que não são apenas opções de formato curto que podem ser nomeadas de maneiras que não permitem inferir o significado delas. Por exemplo, as opções de formato longo --regex e --regexp para mlocate são nomeadas semanticamente no sentido que ambos têm a ver com expressões regulares. Mas não há nada na maneira como são nomeados para dizer que --regexp significa que o próximo argumento é BRE enquanto --regex significa todos argumentos padrão são ERE s.

    
por 08.09.2017 / 09:37