linux xargs

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