No dirijo nada a xargs

14

Tengo un script que en algunas circunstancias puede no tener nada en stdout. Al final del guión, paso las líneas que tengo a otro comando usando xargs. Mi problema es que, cuando no hay nada en stdout, recibo el típico mensaje de error "Uso: programa arg1 arg2".

¿Cómo puedo evitar esto?

Ricardo
fuente
8
Mueva su "EDITAR" en una respuesta y acepte su propia respuesta. De esta manera, sus descubrimientos serán útiles para otras personas. meta.unix.stackexchange.com/questions/809/…
andcoz
1
No tenía suficientes puntos en ese momento. Lo hare ahora.
Richard

Respuestas:

13

Necesita una -ru --no-run-if-emptyopciones.

Tenga en cuenta que este comportamiento particular es difícil de hacer multiplataforma. Versiones BSD de xargsejecución con -rpor defecto. La versión de GNU lo necesita. La versión de FreeBSD xargsignora el -rindicador de compatibilidad con GNU. La versión de Mac OS X ni siquiera acepta la bandera y arroja un error illegal option.

A continuación, puede optar por utilizar una detección de sistema operativo basada en $OSTYPEescribir un script multiplataforma. Aún mejor, trate de detectar el comportamiento de xargssí mismo. Ejecútelo con -ry si eso falla (código de estado> 0), ejecútelo sin -r.

Denis
fuente
3

Una lección de por qué deberías leer las páginas man ...

Las banderas -ro --no-run-if-emptyson mi amigo.

Ricardo
fuente