linux - ¿Cómo detener xargs en primer error?
xargs rm (2)
Tengo un archivo pages.txt
con 100 URLs dentro. Quiero revisarlos uno por uno y fallar en el primer problema. Esto es lo que estoy haciendo:
cat pages.txt | xargs -n 1 curl --silent /
--output /dev/null --write-out ''%{url_effective}: %{http_code}/n''; echo $?
El código de salida es 1
, pero lo veo solo cuando el archivo completo está listo. ¿Cómo parar antes, en el primer problema?
Método general
xargs -n 1 sh -c ''<your_command> $0 || exit 255'' < input
Caso específico
xargs -n 1 sh -c ''curl --silent --output /dev/null /
--write-out "%{url_effective}: %{http_code}/n" $0 || exit 255'' < pages.txt
Explicación
Para cada URL en pages.txt
, ejecuta sh -c ''curl ... $0 || exit 255''
sh -c ''curl ... $0 || exit 255''
uno por uno ( -n 1
) obligando a salir con 255
si el comando falla.
Del man xargs
:
Si cualquier invocación del comando sale con un estado de 255, los xargs se detendrán inmediatamente sin leer ninguna entrada adicional. Cuando esto sucede, se emite un mensaje de error en stderr.
No he encontrado una manera de hacer lo que pides con xargs, pero un bucle con lectura puede ser lo que estás buscando.
while read URL; do
curl --silent /
--output /dev/null --write-out ''%{url_effective}: %{http_code}/n'' $URL;
RET=$?;
echo $RET;
if [ $RET -ne 0 ]; then break; fi
done < pages.txt