如何在出现第一个错误时停止xargs



我有一个pages.txt文件,里面有100个URL。我想一个接一个地检查它们,然后在第一个问题上失败。这就是我正在做的:

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'-n 1),如果命令失败,则强制使用255退出。

来自man xargs:

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

我还没有找到用xargs实现您所要求的功能的方法,但您可能正在寻找一个带有read的循环。

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

最新更新