shell脚本将curl的结果放在变量中,然后是sleep命令



我想在shell脚本中每400ms触发一次curl请求,并将结果放在一个变量中,并在完成curl请求(例如10个请求)后最终将所有结果写入文件中。当我为此使用以下代码

result="$(curl --location --request GET 'http://localhost:8087/say-hello')" & sleep 0.400;

因为创建一个新流程所不能达到的结果。那我该怎么办呢?

您可以使用-mcurl选项来代替sleep。

-m, --max-time <seconds>
Maximum time in seconds that you allow the  whole  operation  to
take.   This is useful for preventing your batch jobs from hang‐
ing for hours due to slow networks or  links  going  down.   See
also the --connect-timeout option.

在接下来的命令序列中可以听到差异:

a=1; a=$(echo 2) ; sleep 1; echo $a
2

和后台进程

a=1; a=$(echo 2) & sleep 1; echo $a
[1] 973
[1]+  Done                    a=$(echo 2)
1

为什么第二种情况下a没有改变?
实际上它被改变了…在一个新的环境中。&用它自己的a创建一个新进程,并将a赋值为2。当进程结束时,该子进程的变量a将被删除,您只能使用a的原始值。

根据您的需求,您可能想要创建resultdir,让每个后台curl进程写入不同的tmpfile,等待wait直到所有卷曲完成并收集您的结果。

相关内容

最新更新