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

Özz*_*esh 16 command-line shell

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

要求

  • 我不想为此使用脚本
  • 一个单行命令来完成这个
  • 需要在 Linux 上运行
  • 需要控制命令运行的次数

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 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支持小数秒的实现)。


zje*_*zje 5

这会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)

  • 尽量不要使用反勾号,它们已被弃用。改用`$(..)`。 (2认同)