Opções longas abreviadas na linha de comando do xclip

4

Na manpage de xclip

-selection

specify which X selection to use, options are 
"primary" to use XA_PRIMARY (default), 
"secondary" for XA_SECONDARY or 
"clipboard" for XA_CLIPBOARD

Note that only the first character of the selection specified with the -selection option is important. 
This means that "p", "sec" and  "clip"  would
have the same effect as using "primary", "secondary" or "clipboard" respectively.

O seguinte para usar a seleção da área de transferência funciona

    xclip -sel clip < ~/.ssh/id_rsa.pub

a manpage diz que clipboard pode ser reduzido para clip , mas não diz que -selection pode ser reduzido para -sel .

Então, por que funciona? Esse recurso para especificar uma opção pertence a xclip ou também a muitas outras aplicações além de xclip ?

    
por Tim 11.06.2016 / 20:11

1 resposta

2

xclip usa a biblioteca X Toolkit, que faz a análise de opções. Todas as opções podem ser abreviadas. A biblioteca só apresenta um erro se houver uma ambiguidade.

Opções, é claro, são coisas como -select , que pode ser abreviado como -sel (possivelmente até -s ).

xterm usa a mesma biblioteca, o mesmo comportamento. Ele usa casos especiais (fora da biblioteca) para tornar o comando -v uma abreviação exclusiva para -version , etc.

O X Toolkit usa um único traço - para opções e não distingue entre "curto" e "longo" porque não é uma extensão de getopt . Como eu apontei em Único traço - para opções de caractere único, mas traços duplos -- para palavras? , foi introduzido mais ou menos na mesma época que o GNU getopt, que fez estender getopt . Isso foi antes do POSIX aparecer, mas AT&T getopt teve vários anos de uso, estabelecendo sua função para opções de caracteres únicos. O GNU getopt usa um traço duplo-- para indicar opções longas .

Observando uma longa digressão, você pode ler o código-fonte para o GNU getopt (que não está relacionado com xclip ) do seu repositório git , por exemplo,

 369    Long-named options begin with '--' instead of '-'.
 370    Their names may be abbreviated as long as the abbreviation is unique
 371    or is an exact match for some defined option.  If they have an
 372    argument, it follows the option name in the same ARGV-element, separated
 373    from the option name by a '=', or else the in next ARGV-element.
 374    When 'getopt' finds a long-named option, it returns 0 if that option's
 375    'flag' field is nonzero, the value of the option's 'val' field
 376    if the 'flag' field is zero.
    
por 11.06.2016 / 21:54

Tags