Según la página de manual, xargs se cerrará si una de las líneas de ejecución sale con un error de 255:
Si alguna invocación del comando sale con un estado de 255, xargs se detendrá inmediatamente sin leer ninguna entrada adicional. Cuando esto sucede, se emite un mensaje de error en stderr.
¿Cómo puedo hacer que xargs no haga esto?
Tengo un trabajo por lotes de aproximadamente 1500 líneas que quiero ejecutar, 50 líneas a la vez. Estaba descubriendo que siempre estaba muriendo en cierta línea y no completaba el trabajo. ¡No está bien!
Una pregunta aún mejor, la pregunta que describe lo que estoy tratando de hacer, es:
¿Cómo puedo ejecutar un script por lotes de 1500 líneas, 50 líneas a la vez, para que no salga del trabajo en el medio y para que la salida se capture en un archivo de registro de algún tipo?
sh -c
wors para mí!Puede escribir su invocación xargs para enmascarar los códigos de retorno de sus líneas de comando. Con algo como lo siguiente,
xargs
nunca verá códigos de salida devueltos por algún comando :fuente
Acabo de encontrar una respuesta divertida a esta, aunque su utilidad dependerá del comando que intente ejecutar.
Si está utilizando xargs para armar básicamente una lista de comandos, puede obtener este comportamiento diciéndole a xargs que repita el comando y luego canalizando a bash.
Por ejemplo, si está intentando eliminar una lista de cosas que pueden o no existir:
Esto funciona porque, primero, xargs solo llama echo, por lo que no verá ningún error. Luego, segundo, porque el comportamiento predeterminado de bash para continuar la ejecución después de una declaración fallida.
Para ser más específico sobre mi caso, estaba usando esto para eliminar un montón de versiones antiguas de aplicaciones de AWS ElasticBeanstalk de esta manera:
fuente
Los siguientes trabajos de construcción para mí:
Incluso si la actualización de svn falló en algún elemento, el proceso continuó
fuente
Si estaba usando
xargs
confind
, use la-exec
opción de en sufind
lugar:fuente
xargs
podía ejecutar comandos en paralelo. Guay. Si solo desea minimizar el número de invocaciones de comandos,-exec
tiene un+
parámetro.