> out & curl "url1" --output /dev/null 2>> out & wa-6ren">
gpt4 book ai didi

linux - 如何仅在命令完成时输出

转载 作者:太空狗 更新时间:2023-10-29 11:50:08 25 4
gpt4 key购买 nike

我正在使用 & 运行多个命令:

curl "url1" --output /dev/null 2>> out &
curl "url1" --output /dev/null 2>> out &
wait

这不能很好地工作,因为输出行是交错的。我希望每个 curl 都保留其输出,直到完成为止。如何做到这一点?

我知道我可以使用临时文件,连接在一起然后删除。有没有更好的方法?

curl "url1" --output /dev/null 2>> out1 &
curl "url1" --output /dev/null 2>> out2 &
wait

最佳答案

您可以执行每个 curl在子外壳中:

echo "$(curl "url1" 2>&1 >/dev/null)" >> out &
echo "$(curl "url2" 2>&1 >/dev/null)" >> out &
wait

2>&1将 stderr 重定向到 stdout。
是的,你可以嵌套 ""使用子 shell 命令 $() :)

缺点:这可能无法保留输出顺序。以防第二个curl先完成,先输出。

为了保持输出顺序,您可以使用 cat<() . Bash 的进程替换 <(COMMAND)COMMAND 的输出创建一个临时文件(实际上,它是一个 FIFO) ,但您不必关心该临时文件的名称、创建和删除。

cat \
<(curl "url1" 2>&1 >/dev/null) \
<(curl "url2" 2>&1 >/dev/null) \
> out

\逃脱换行符。没有 \一切都必须写在一行中。

关于linux - 如何仅在命令完成时输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41481179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com