我使用&
运行多个命令:
curl "url1" --output /dev/null 2>> out & curl "url1" --output /dev/null 2>> out & wait
这不能很好地工作,因为输出行是交错的。 我希望每个curl
都能保持它的输出,直到完成。 怎么做?
我知道我可以使用临时文件,concat在一起,然后删除。 有更好的方法吗?
curl "url1" --output /dev/null 2>> out1 & curl "url1" --output /dev/null 2>> out2 & wait
你可以在子shell中执行每个curl
:
echo "$(curl "url1" 2>&1 >/dev/null)" >> out & echo "$(curl "url2" 2>&1 >/dev/null)" >> out & wait
2>&1
将stderr重定向到stdout。
是的,你可以使用subshell命令$()
:)嵌套""
下行:这可能无法保持产出的顺序。 第二次curl
首先完成时,首先输出。
为了保持输出的顺序,你可以使用cat
和<()
。 Bash的进程替换 <(COMMAND)
从COMMAND
的输出创建一个临时文件(实际上是一个FIFO),但不必关心该临时文件的名称,创建和删除。
cat \ <(curl "url1" 2>&1 >/dev/null) \ <(curl "url2" 2>&1 >/dev/null) \ > out
逃避换行符。 没有“一切”必须写在一条线上。