Özz*_*esh 16 command-line shell
我知道如何同时执行多个命令,但现在我需要的是多次运行相同的命令,并在命令执行之间有一些时间延迟。
slm*_*slm 26
您可以使用这个衬垫来完成您的要求:
$ cmd="..some command..."; for i in $(seq 5); do $cmd; sleep 1; done
Run Code Online (Sandbox Code Playgroud)
$ date
Fri Nov 22 01:37:43 EST 2013
$ cmd="echo"; for i in $(seq 5); do $cmd "count: $i"; sleep 1;done
count: 1
count: 2
count: 3
count: 4
count: 5
$ date
Fri Nov 22 01:37:51 EST 2013
Run Code Online (Sandbox Code Playgroud)
您可以调整sleep ...
命令之间的任何延迟,并更改cmd=...
为您想要的任何命令。
您还可以使用大括号扩展代替seq
命令来生成值范围。由于大括号扩展将在与for
循环相同的 shell 中运行,因此性能更高一些。使用子外壳 ( $(seq ..)
) 的性能稍差,因为它会在for
循环运行的外壳的范围内生成子外壳。
$ cmd="echo"; for i in {1..5}; do $cmd "count: $i"; sleep 1;done
count: 1
count: 2
count: 3
count: 4
count: 5
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 17
与zsh
:
repeat 10 {date; sleep 5}
Run Code Online (Sandbox Code Playgroud)
它运行命令(此处date
作为示例),它们之间有 5 秒的睡眠时间。
如果您想每 5 秒运行一次(并假设该命令的运行时间少于 5 秒):
typeset -F SECONDS=0; repeat 10 {date; ((n=5-SECONDS)); SECONDS=0; LC_ALL=C sleep $n}
Run Code Online (Sandbox Code Playgroud)
(假设一个sleep
支持小数秒的实现)。
这会date
以 5 秒的延迟运行命令 10 次。将 10 in 更改seq 1 10
为您想要的次数,替换date
为您想要的命令并更改 5 insleep 5
以更改延迟时间。
for d in $(seq 1 10); do date; sleep 5; done;
Run Code Online (Sandbox Code Playgroud)