问题描述
如何在终端中执行程序 X 次?
我读到我必须做一个 bin/bash txt,但我不知道如何执行这 X 次。
最佳回答
您可以使用 xargs
和 seq
。一般来说:
seq nr_of_times_to_repeat | xargs -Iz command
例如:
seq 10 | xargs -Iz xdotool click 1
将执行 xdotool click 1
命令 10 次。
次佳回答
打开终端并使用以下 bash
命令:
for i in {1..5}; do xdotool click 1; done
有点冗长和 1s 延迟:
for i in {1..5}; do echo click \#$i && xdotool click 1 && sleep 1; done
click #1
click #2
click #3
click #4
click #5
第三种回答
这应该做:
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
x=$(( $x + 1 ))
done
其中 10 是运行命令的次数
如果您需要稍微休息一下:
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
sleep 1
x=$(( $x + 1 ))
done
将脚本复制到一个空文件中,将 <command to run>
替换为您的 xdotool
命令,将其另存为 run_xdotool.sh
,通过以下命令运行它:
sh /path/to/run_xdotool.sh
或者,您可以使其可执行并简单地运行它
/path/to/run_xdotool.sh
另一种解决方案:使用 xdotool 的内置重复选项
既然你提到用它来做点击,最简单的可能是使用 xdotool
自己的 内置 重复选项。格式为:
xdotool click --delay <delay> --repeat <repeats> <button>
(delay in milliseconds between the clicks)
要连续点击 10 次鼠标(按钮 1),中间间隔一秒,命令是:
xdotool click --delay 1000 --repeat 10 1
第四种回答
如果你有 GNU Parallel,你可以运行:
seq 10 | parallel -N0 doit
所有新计算机都有多核,但大多数程序本质上是串行的,因此不会使用多核。然而,许多任务是非常可并行化的:
-
在多个文件上运行相同的程序
-
对文件中的每一行运行相同的程序
-
对文件中的每个块运行相同的程序
GNU Parallel 是一个通用的并行化器,可以很容易地在同一台机器或您可以通过 ssh 访问的多台机器上并行运行作业。
如果你有 32 个不同的作业,你想在 4 个 CPU 上运行,一个直接的并行化方法是在每个 CPU 上运行 8 个作业:
GNU Parallel 会在一个进程完成时生成一个新进程——保持 CPU 处于活动状态,从而节省时间:
安装
个人安装不需要 root 访问权限。这样做可以在 10 秒内完成:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
对于其他安装选项,请参阅 http://git.savannah.gnu.org/cgit/parallel.git/tree/README
学到更多
查看更多示例:http://www.gnu.org/software/parallel/man.html
观看介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
浏览教程:http://www.gnu.org/software/parallel/parallel_tutorial.html
注册电子邮件列表以获得支持:https://lists.gnu.org/mailman/listinfo/parallel
第五种回答
您可以使用 C 风格的 for
循环,它比 brace-expansion 版本 ( {1..5}
) 的优势在于能够使用变量指定终点。任一版本都比使用外部实用程序 (seq
) 更好。
t=5
for ((x = 1; x <= t; x++))
do
xdotool click 1
done
全部在一条线上:
t=5; for ((x = 1; x <= t; x++)); do xdotool click 1; done
或者您可以在没有循环的情况下完成它(对于这个特定的实用程序和功能):
xdotool click --repeat 5 --delay 50 1