O 'xargs -x' nunca executa um subconjunto de argumentos apropriado em que o comprimento da linha de comando não exceda o limite '-s'?

1

xargs tem uma opção -x que especifica que xargs sai se o tamanho (consulte a opção -s ) for excedido.

Isso significa que xargs executa todos os argumentos de uma só vez (se o número de caracteres na linha de comando não exceder o número especificado por -s ) ou não é executado (senão)?

É correto que com -x , xargs nunca execute um subconjunto adequado de argumentos (mearning: nem todos) onde o comprimento da linha de comando não exceda o número especificado por -s ?

    
por Ben 23.11.2018 / 14:04

1 resposta

3

-x resulta em xargs a sair assim que processa um argumento que não se encaixa, sem tentar usar nenhum dos argumentos na linha que está a criar atualmente.

Você pode ver a diferença que faz com o seguinte comando:

(printf '%s ' {1..2048}; printf %s {1..1024}) | xargs -s 2048

Aqui, xargs recebe os inteiros de 1 a 2048, cada um seguido por um espaço, depois todos os inteiros de 1 a 1024 sem separador. Ele executa echo para gerar os argumentos, mantendo um limite de 2048 caracteres. Quando ele lê o último argumento, que não cabe em uma linha, xargs exibe o erro "linha de argumento muito longa", mas ainda chama echo com os argumentos acumulados antes de encontrar o último argumento, então você ainda vê todos os inteiros de 1 a 2048.

com -x :

(printf '%s ' {1..2048}; printf %s {1..1024}) | xargs -s 2048 -x

pára em 1854, porque xargs se depara com o argumento longo, está construindo a linha de argumento começando com 1855, e por causa da opção -x , ele não tenta fazer nada com a linha de argumento que é atualmente edifício.

Não acredito que seja possível para xargs executar um comando com êxito sem -x e não com -x . O argumento -x apenas garante que, se uma linha de argumento for muito longa, nenhuma parte será processada.

Com ou sem -x , xargs não processa argumentos após o argumento de transbordamento.

(Agradecimentos a ilkkachu por apontar que minha versão anterior desta resposta estava errada.)

    
por 23.11.2018 / 14:27

Tags