如何阻止第一个错误的xargs?

我有一个包含100个URL的pages.txt文件。 我想逐一检查他们,并在第一个问题上失败。 这就是我正在做的事情:

 cat pages.txt | xargs -n 1 curl --silent \ --output /dev/null --write-out '%{url_effective}: %{http_code}\n'; echo $? 

退出代码是1 ,但只有在整个文件完成时才能看到。 如何在第一个问题上提前停止?

一般方法

 xargs -n 1 sh -c '<your_command> $0 || exit 255' < input 

具体情况

 xargs -n 1 sh -c 'curl --silent --output /dev/null \ --write-out "%{url_effective}: %{http_code}\n" $0 || exit 255' < pages.txt 

说明

对于pages.txt每个URL,执行sh -c 'curl ... $0 || exit 255' pages.txt sh -c 'curl ... $0 || exit 255' sh -c 'curl ... $0 || exit 255'-n 1 ),如果命令失败,强制退出255

man xargs

如果任何命令的调用退出状态为255,则xargs将立即停止,而不读取任何进一步的输入。 发生这种情况时,stderr上会发出错误消息。

我还没有找到一种方法来做你所要求的xargs,但是一个带有阅读的循环可能就是你正在寻找的东西。

 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