Nada de Piping para xargs

14

Eu tenho um script que pode, em algumas circunstâncias, não ter nada no stdout. No final do script, passo as linhas que tenho para outro comando usando xargs. Meu problema é, quando não há nada no stdout, recebo a típica mensagem de erro "Uso: program arg1 arg2".

Como posso evitar isso?

    
por Richard 18.01.2013 / 22:20

2 respostas

13

Você precisa de opções -r ou --no-run-if-empty .

Tenha em mente que esse comportamento em particular é difícil de criar em várias plataformas. As versões BSD de xargs são executadas com -r por padrão. A versão GNU precisa disso. A versão do FreeBSD de xargs ignora o sinal -r para compatibilidade com o GNU. A versão do Mac OS X nem aceita o sinalizador e lança um erro illegal option .

Você pode optar por usar uma detecção de sistema operacional baseada em $OSTYPE para escrever um script entre plataformas. Melhor ainda, tente detectar o comportamento de xargs em si. Execute-o com -r e se isso falhar (código de status > 0), execute-o sem -r .

    
por 19.01.2013 / 08:58
3

Uma lição de por que você deveria ler as man pages…

As bandeiras -r ou --no-run-if-empty são minhas.

    
por 19.01.2013 / 03:02

Tags