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?
Respostas:
Você precisa de um
-r
ou--no-run-if-empty
opções.Lembre-se de que é difícil criar esse comportamento específico em várias plataformas. Versões BSD de
xargs
execução-r
por padrão. A versão GNU precisa disso. A versão do FreeBSDxargs
ignora o-r
sinalizador para compatibilidade com o GNU. A versão do Mac OS X nem sequer aceita a sinalização e gera um erroillegal option
.Você pode optar por usar uma detecção de SO baseada em
$OSTYPE
para escrever um script de plataforma cruzada. Melhor ainda, tente detectar o comportamento dexargs
si mesmo. Execute-o com-r
e se isso falhar (código de status> 0), execute-o sem-r
.fonte
Uma lição sobre por que você deve ler as páginas de manual…
As bandeiras
-r
ou--no-run-if-empty
são meu amigo.fonte