我偶尔会像这样运行bash命令行:

n=0; while [[ $n -lt 10 ]]; do some_command; n=$((n+1)); done

在一行中运行some_command多次——在本例中为10次。

通常some_command实际上是一个命令链或管道。

有没有更简洁的方法呢?


当前回答

For循环可能是正确的方法,但这里有一个有趣的替代方法:

Echo -e {1..10}"\n" |xargs -n1 some_command

如果需要迭代数作为调用的参数,请使用:

Echo -e {1..10}"\n" |xargs -I@ echo现在我正在运行迭代@

编辑:上面给出的解决方案只能通过简单的命令运行(没有管道等)才能顺利工作,这是正确的评论。您总是可以使用sh -c来做更复杂的事情,但不值得这样做。

我通常使用的另一种方法是以下函数:

Rep () {s=$1;shift;e=$1;shift;对于x在' seq $s $e ';执行c=${@//@/$x};完成;}

现在你可以把它称为:

代表3 10回声迭代@

前两个数字给出了范围。@将被转换为迭代号。现在你也可以在管道中使用这个:

代表1 10 "ls R@/|wc -l"

给出R1目录下的文件数。R10。

其他回答

如果你正在使用zsh shell:

repeat 10 { echo 'Hello' }

其中10是命令将被重复执行的次数。

使用常量:

for ((n=0;n<10;n++)); do
    some_command; 
done

使用变量(可以包括数学表达式):

x=10; for ((n=0; n < (x / 2); n++)); do some_command; done

使用GNU Parallel你可以做到:

parallel some_command ::: {1..1000}

如果您不希望将数字作为参数,并且一次只运行一个作业:

parallel -j1 -N0 some_command ::: {1..1000}

观看介绍视频快速介绍: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

浏览本教程(http://www.gnu.org/software/parallel/parallel_tutorial.html)。命令行 用爱你换吧。

我用这个循环来求解,其中repeat是一个整数,表示循环的个数

repeat=10
for n in $(seq $repeat); 
    do
        command1
        command2
    done

如果可以定期执行,可以运行以下命令以每1秒无限期地运行一次。您可以放置其他自定义检查,以运行n次。

看-n 1 some_command

如果您希望可视化地确认更改,可以在ls命令之前添加——differences。

根据OSX手册页,还有

-cumulative选项使高亮显示“粘性”,显示一个 运行显示所有曾经改变的位置。- t 或者——no-title选项关闭显示间隔的标题, 命令,并在顶部显示当前时间,以及 下面是空行。

Linux/Unix手册页可以在这里找到