当前位置: 首页>>技术教程>>正文


运行程序 X 次

问题描述

如何在终端中执行程序 X 次?

我读到我必须做一个 bin/bash txt,但我不知道如何执行这 X 次。

最佳回答

您可以使用 xargsseq 。一般来说:

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13273.html,未经允许,请勿转载。