运行程序X次


18

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

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


它是什么,脚本,应用程序,它是做什么的?如果出现错误应该怎么办?它在运行后关闭吗?是否应该检查它是否已关闭?
Jacob Vlijm 2014年

它只是单击,xdotool单击,我认为它不会产生错误。
user3597989 2014年

@KasiyA:不完全是所有这些答案都在不断循环。在此,OP要求固定数量的循环。
西尔文·皮诺

4
或Blufter的网站:askubuntu.com/a/508752/158442-但它们都不属于此处,而是位于此处。:D
老师

Answers:



10

打开一个终端并使用以下bash命令:

for i in {1..5}; do xdotool click 1; done

有点冗长和延迟1秒:

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

'执行'的
sintax

@ user3597989它对我有用,您可以再检查一次吗?
西尔文·皮内

@ user3597989哦,我知道,请删除第一个$。它只是用来指示shell提示,如sylvain@sylvain-ThinkPad-T430s:~$。我们通常将其添加到命令行答案中,以区分命令与其结果。
西尔文·皮诺

@ user3597989:我删除了shell提示符以避免混淆
Sylvain Pineau 2014年

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

5

如果您具有GNU Parallel,则可以运行:

seq 10 | parallel -N0 doit

所有新计算机都具有多个内核,但是大多数程序本质上是串行的,因此将不使用多个内核。但是,许多任务是极其可并行化的:

  • 在多个文件上运行同一程序
  • 为文件中的每一行运行相同的程序
  • 对文件中的每个块运行相同的程序

GNU Parallel是一个通用的并行器,可以轻松地在具有ssh访问权限的同一台计算机或多台计算机上并行运行作业。

如果要在4个CPU上运行32个不同的作业,则并行化的直接方法是在每个CPU上运行8个作业:

简单的调度

GNU Parallel会在完成时生成一个新进程-使CPU保持活动状态,从而节省时间:

GNU并行调度

安装

个人安装不需要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


1
我喜欢并行,并尽可能地建议使用它。不过,对于您的特定选择,有一个问题:您为什么更愿意建议使用这种形式,而不是parallel -N0 doit ::: {1..10}
Phillip -Zyan K Lee- Stockmann,

1
{1..10}在(t)的CSH /鱼/灰不工作,并且{1..10}构建体通过命令行的长度的限制,所以这不会工作:{1..1000000000}seq 1000000000将工作得很好。但是对于大多数情况,它{1..10}会按预期工作,我也经常使用它。
Ole Tange'2

4

您可以使用C样式for循环,该循环比括号扩展版本({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

0

只需使用watch命令即可:

watch -n x <your command>

将x更改为以秒为单位的时间。

范例:

watch -n 1 xdotool click 1 

因此,xdotool单击1将每1秒重复一次,完成后将其终止。


4
我认为问题是特定于在命令中运行定义的次数,而不是在定义的时间间隔内运行。
Jacob Vlijm 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.