我有一个 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上发布错误消息。
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
xargs
则有 -P
选项可以实现并行。 - yegor256
xargs
,因为它有-P
选项。 - yegor256parallel
... 它比xargs
简单的模型更具灵活性... - twalbergxargs
已经预装在大多数系统中。parallel
需要额外安装步骤。如果这对某些人很重要的话。 - 425nesp