如何在第一次出错时停止xargs?

时间:2014-10-21 10:26:27

标签: linux xargs

我有一个pages.txt文件,里面有100个网址。我想逐一检查它们并在第一个问题上失败。这就是我正在做的事情:

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

退出代码为1,但我只在整个文件完成后才看到它。如何在第一个问题上提前停止?

2 个答案:

答案 0 :(得分:38)

一般方法

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中的每个网址,如果命令失败,请逐个执行sh -c 'curl ... $0 || exit 255'-n 1)强制退出255

来自man xargs

  

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

答案 1 :(得分:1)

我没有找到办法用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