Si no se proporciona información a xargs, no permita que xargs ejecute la utilidad

Si no se proporciona información a xargs, no permita que xargs ejecute la utilidad

Tengo este comando:

docker volume ls -qf dangling=true | xargs docker volume rm

Entiendo esto:

"docker volume rm" requires at least 1 argument.
See 'docker volume rm --help'.

Usage:  docker volume rm [OPTIONS] VOLUME [VOLUME...]

Supongo que es porque no hubo entrada xargs(porque el comando no devolvió volúmenes coincidentes docker). ¿Cómo puedo decir xargsque hacer?nadacuando no recibe ninguna entrada?

Respuesta1

Estás buscando la -ropción. Esta es una opción no estándar que puede implementarse en su sistema (consulte su xargsmanual).

Del xargsmanual de GNU:

-r,--no-run-if-empty

Si la entrada estándar no contiene espacios que no sean espacios en blanco, no ejecute el comando. Normalmente, el comando se ejecuta una vez incluso si no hay ninguna entrada. Esta opción es una extensión GNU.

Del manual en un sistema OpenBSD:

-r

No ejecute el comando si no hay argumentos. Normalmente el comando se ejecuta al menos una vez incluso si no hay argumentos.

En FreeBSD y macOS, este es el comportamiento predeterminado. FreeBSD tiene la -ropción de compatibilidad con GNU xargs, mientras que macOS no.

xargsen AIX y Solaris no tiene una -ropción y se desconoce cuál es el comportamiento predeterminado en AIX (no tengo acceso a un sistema AIX). Solaris ejecutará la utilidad al menos una vez de forma predeterminada.


Una solución alternativa portátil en sistemas sin -rindicador xargs(y donde ejecutar la utilidad al este una vez es el comportamiento predeterminado, como en Solaris) es usar

something | xargs sh -c '[ "$#" -gt 0 ] && utility "$@"' sh

(o algo parecido; tenga en cuenta que el final shes obligatorio) ¿dónde utilityestá la utilidad que le gustaría ejecutar xargsy dónde somethingproduce algunos argumentos?

El breve script de shell [ "$#" -gt 0 ] && utility "$@"prueba si se le dieron argumentos y, de ser así, ejecuta la utilidad con esos argumentos.

información relacionada