linux 如何在第一个错误时停止xargs?

jljoyd4f  于 2023-08-03  发布在  Linux
关注(0)|答案(2)|浏览(102)

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

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

字符串
退出代码是1,但只有当整个文件完成时才能看到它。如何更早地停止,就第一个问题?

5jvtdoz2

5jvtdoz21#

一般方法

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上会发出一条错误消息。

xxslljrj

xxslljrj2#

我还没有找到一种方法来完成您对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

字符串

相关问题