我知道如何同时执行多个命令,但现在我需要的是多次运行同一命令,并在命令执行之间有一些时间延迟。
要求
- 我不想为此使用脚本
- 一个单行命令即可完成此操作
- 需要在Linux上运行
- 需要控制命令运行的次数
答案1
您可以使用这个衬里来完成您所要求的操作:
$ cmd="..some command..."; for i in $(seq 5); do $cmd; sleep 1; done
例子
$ 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
您可以sleep ...
根据需要调整命令之间的延迟,并更改cmd=...
为您想要的任何命令。
大括号扩展与 seq cmd
您还可以使用大括号扩展而不是命令seq
来生成值范围。这会提高性能,因为大括号扩展将在与for
循环相同的 shell 中运行。使用 subshell ( ) 的性能稍差一些,因为它在循环运行$(seq ..)
的 shell 范围内生成一个子 shell 。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
答案2
和zsh
:
repeat 10 {date; sleep 5}
运行命令(此处date
作为示例),命令之间有 5 秒的睡眠时间。
相反,如果您想每 5 秒运行一次(并假设该命令运行时间少于 5 秒):
typeset -F SECONDS=0; repeat 10 {date; ((n=5-SECONDS)); SECONDS=0; LC_ALL=C sleep $n}
(假设sleep
支持小数秒的实现)。
答案3
这将运行该date
命令 10 次,延迟 5 秒。将 10 更改seq 1 10
为您想要的次数,替换date
为您想要的命令,然后更改 5sleep 5
以更改延迟时间。
for d in $(seq 1 10); do date; sleep 5; done;