如何以一定秒数的时间延迟多次执行同一命令“X”?

如何以一定秒数的时间延迟多次执行同一命令“X”?

我知道如何同时执行多个命令,但现在我需要的是多次运行同一命令,并在命令执行之间有一些时间延迟。

要求

  • 我不想为此使用脚本
  • 一个单行命令即可完成此操作
  • 需要在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 中运行。使用 subshel​​l ( ) 的性能稍差一些,因为它在循环运行$(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;

相关内容