
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 xargs
que hacer?nadacuando no recibe ninguna entrada?
Respuesta1
Estás buscando la -r
opción. Esta es una opción no estándar que puede implementarse en su sistema (consulte su xargs
manual).
Del xargs
manual 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 -r
opción de compatibilidad con GNU xargs
, mientras que macOS no.
xargs
en AIX y Solaris no tiene una -r
opció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 -r
indicador 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 sh
es obligatorio) ¿dónde utility
está la utilidad que le gustaría ejecutar xargs
y dónde something
produce 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.