xargs: A ordem das opções é importante?

3

Entrada 0

echo foo | xargs -L 1 -I '{}' echo '{}'

Saída 0

foo

Entrada 1

echo foo | xargs -I '{}' -L 1 echo '{}'

Saída 1

{} foo

Por que mudar a ordem das opções de xargs altera a saída?

Versão: xargs (GNU findutils) 4.6.0

    
por Cyker 24.08.2017 / 00:51

1 resposta

5

Quando as opções dadas aos xargs conflitam, a ordem pode ser importante.

IEEE Std 1003.1-2008, Edição 2016 / Especificações de base de grupo aberto Edição 7 adicionado o seguinte texto 1 para a especificação de xargs:

The -I, -L, and -n options are mutually-exclusive. Some implementations use the last one specified if more than one is given on a command line; other implementations treat combinations of the options in different ways.

Isto codifica o comportamento de muitas implementações de xargs, voltando à versão original no PWB / Unix, cujo página man diz

When there are flag conflicts (e.g., -l vs. -n), the last flag has precedence.

Na versão GNU dos xargs, -L desativa qualquer opção anterior -I . Então, no seu segundo exemplo,

echo foo | xargs -I '{}' -L 1 echo '{}'

{} é apenas um argumento comum passado para echo , sem nenhuma substituição sendo feita.

[1] Em comparação com IEEE Std 1003.1, edição 2004 / Open Group Especificações Básicas Edição 6 .

    
por 24.08.2017 / 02:59

Tags