プログラムをX回実行する


18

ターミナルでプログラムをX回実行するにはどうすればよいですか?

bin / bash txtを実行する必要があることを読みましたが、これをX回実行する方法がわかりません。


スクリプト、アプリケーション、それは何ですか?エラーが発生した場合はどうなりますか?実行後に閉じますか?閉じているかどうかを確認する必要がありますか?
ジェイコブVlijm 14

クリックするだけで、xdotoolをクリックするとエラーが発生するとは思わない。
ユーザー3597989 14

@KasiyA:すべての答えが永遠にループしているわけではありません。ここで、OPは固定数のループを要求します。
シルヴァンピノー14

4
またはBlufter's:askubuntu.com/a/508752/158442-しかし、両方ともそこに属していませんが、ここにあります。:D
ムル14

2
@KasiyA:Askの答えはここにあるべきではありません。ターミナルでx時間間隔ごとにコマンド
シルヴァンピノー14

回答:


24

あなたは使用することができるxargsseq。一般的に:

seq nr_of_times_to_repeat | xargs -Iz command

例えば:

seq 10 | xargs -Iz xdotool click 1

xdotool click 1コマンドを10回実行します。


1
これはおそらく最もシンプルなことは言うまでもなく、おそらく最もエレガントなソリューションです。
セス14

これはパイプの特徴を説明するための本当に良い例だと思います。
PascalVKooten 14

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

'do'を伴うsintaxエラー..
user3597989 14

@ user3597989うまくいきました。もう一度確認してもらえますか?
シルヴァンピノー14

@ user3597989ああ、私は知っている、最初を削除してください$。のようなシェルプロンプトを示すためだけにありますsylvain@sylvain-ThinkPad-T430s:~$。通常、コマンドラインの回答に追加して、コマンドと結果を区別します。
シルヴァンピノー14

@ user3597989:私は混乱を避けるために、プロンプトシェルを削除
シルヴァン・ピノー

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)

連続して1秒に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並列スケジューリング

設置

個人インストールでは、ルートアクセスは必要ありません。これを行うことにより、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
並列が大好きで、可能な限りその使用方法を提案しようとしています。あなたの特定のオプションへの1つの質問:なぜこの形式を提案することを好まなかったparallel -N0 doit ::: {1..10}
フィリップ-Zyan K Lee- Stockmann

1
{1..10}(T)のcsh /魚/灰に仕事をしませんし、{1..10}これは動作しませんのでコンストラクトは、コマンドラインの長さによって制限されています。{1..1000000000}一方でseq 1000000000うまく動作します。しかし、ほとんどの場合{1..10}、期待どおりに機能し、私もそれをよく使用します。
オレ丹下

4

Cスタイルのforループを使用できます。これは、{1..5}変数を使用してエンドポイントを指定できるという中括弧拡張バージョン()よりも利点があります。どちらのバージョンも、外部ユーティリティ(seq)を使用するよりも優れています。

t=5
for ((x = 1; x <= t; x++))
do
    xdotool click 1
done

すべて1行で:

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 click 1は1秒ごとに繰り返され、完了したら終了します。


4
質問は、コマンドを定義された回数実行することに固有のものであり、定義された間隔ではそれほど多くないと思います。
ジェイコブVlijm 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.