zsh 带循环的睡眠辅助

Reg*_*ser 4 unix curl loops zsh

非常简单的要求:每个curl帖子之间有1秒的暂停

#!/usr/local/bin/zsh
while true
do
 for p (**/*.xml) {curl -X POST -H "Content-Type:application/xml"  -d @"${p}" "https://url/postAPI" > "post_${p}"}
     sleep 1
 done
Run Code Online (Sandbox Code Playgroud)

睡眠确实会暂停,但增量为 3。

我究竟做错了什么??

谢谢!

当我说增量时,这就是我的意思。

post
post
post
sleep 1
Run Code Online (Sandbox Code Playgroud)

我想要:

post
sleep 1
post
sleep 1
post
sleep 1
Run Code Online (Sandbox Code Playgroud)

在这个 tmp 目录中,只有 3 个文件,但最终会达到 300 个。

che*_*ner 6

您正在使用循环的简短形式for,因此只有{ curl ... }命令构成循环体;sleep 1发生在for循环之后。相反,请确保该命令位于循环sleep体中for

while true
do
   for p in **/*.xml; do
       curl -X POST -H "Content-Type:application/xml"  -d @"${p}" "https://url/postAPI" > "post_${p}"
       sleep 1
   done
done
Run Code Online (Sandbox Code Playgroud)

(您也可以将形成短格式循环主体的构造sleep 1放入其中,但我建议避免使用这种形式,除了交互式 shell 中的快速、一次性循环之外。){...}for