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?


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.