我想在shell脚本中每400ms触发一次curl请求,并将结果放在一个变量中,并在完成curl请求(例如10个请求)后最终将所有结果写入文件中。当我为此使用以下代码
时result="$(curl --location --request GET 'http://localhost:8087/say-hello')" & sleep 0.400;
因为和创建一个新流程所不能达到的结果。那我该怎么办呢?
您可以使用-m
curl选项来代替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
直到所有卷曲完成并收集您的结果。