我有一个包含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