Tubulação de nada para xargs

14

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

Como posso evitar isso?

Richard
fonte
8
Mova seu "EDIT" em uma resposta e aceite sua própria resposta. Dessa forma, suas descobertas serão úteis para outras pessoas. meta.unix.stackexchange.com/questions/809/…
andcoz
1
Não tinha pontos suficientes no momento. Vai fazer isso agora.
Richard

Respostas:

13

Você precisa de um -rou --no-run-if-emptyopções.

Lembre-se de que é difícil criar esse comportamento específico em várias plataformas. Versões BSD de xargsexecução -rpor padrão. A versão GNU precisa disso. A versão do FreeBSD xargsignora o -rsinalizador para compatibilidade com o GNU. A versão do Mac OS X nem sequer aceita a sinalização e gera um erro illegal option.

Você pode optar por usar uma detecção de SO baseada em $OSTYPEpara escrever um script de plataforma cruzada. Melhor ainda, tente detectar o comportamento de xargssi mesmo. Execute-o com -re se isso falhar (código de status> 0), execute-o sem -r.

Denis
fonte
3

Uma lição sobre por que você deve ler as páginas de manual…

As bandeiras -rou --no-run-if-emptysão meu amigo.

Richard
fonte