Wie führe ich ein Programm X-mal im Terminal aus?
Ich habe gelesen, dass ich einen bin / bash txt machen muss, aber ich weiß nicht, wie ich diesen X-mal ausführen soll.
Wie führe ich ein Programm X-mal im Terminal aus?
Ich habe gelesen, dass ich einen bin / bash txt machen muss, aber ich weiß nicht, wie ich diesen X-mal ausführen soll.
Antworten:
Sie können xargs
und verwenden seq
. Allgemein:
seq nr_of_times_to_repeat | xargs -Iz command
Beispielsweise:
seq 10 | xargs -Iz xdotool click 1
Führt den xdotool click 1
Befehl zehnmal aus.
Öffnen Sie ein Terminal und verwenden Sie den folgenden bash
Befehl:
for i in {1..5}; do xdotool click 1; done
Mit ein bisschen Ausführlichkeit und 1s Verzögerung:
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
$
. Es ist nur dazu da, eine Shell-Eingabeaufforderung wie anzugeben sylvain@sylvain-ThinkPad-T430s:~$
. Wir fügen es normalerweise zu Befehlszeilenantworten hinzu, um den Befehl von seinen Ergebnissen zu unterscheiden.
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
x=$(( $x + 1 ))
done
Dabei ist 10 die Häufigkeit, mit der der Befehl ausgeführt wird
Wenn Sie eine kleine Pause einplanen müssen:
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
sleep 1
x=$(( $x + 1 ))
done
Kopieren Sie das Skript in eine leere Datei, ersetzen Sie es <command to run>
durch Ihren xdotool
Befehl, speichern Sie es unter run_xdotool.sh
und führen Sie es mit dem Befehl aus:
sh /path/to/run_xdotool.sh
Alternativ können Sie es ausführbar machen und es einfach ausführen
/path/to/run_xdotool.sh
Da Sie erwähnen, dass es für Klicks verwendet werden soll, ist es möglicherweise am einfachsten, die xdotool
integrierte Wiederholungsoption zu verwenden. Das Format ist:
xdotool click --delay <delay> --repeat <repeats> <button>
(delay in milliseconds between the clicks)
Der Befehl für 10 Mausklicks (Taste 1) in einer Reihe, eine Sekunde dazwischen, lautet:
xdotool click --delay 1000 --repeat 10 1
Wenn Sie GNU Parallel haben, können Sie Folgendes ausführen:
seq 10 | parallel -N0 doit
Alle neuen Computer haben mehrere Kerne, aber die meisten Programme sind serieller Natur und verwenden daher nicht die mehreren Kerne. Viele Aufgaben sind jedoch extrem parallelisierbar:
GNU Parallel ist ein allgemeiner Parallelisierer, mit dem Sie auf einfache Weise Jobs auf demselben Computer oder auf mehreren Computern, auf die Sie ssh-Zugriff haben, parallel ausführen können.
Wenn Sie 32 verschiedene Jobs auf 4 CPUs ausführen möchten, können Sie auf einfache Weise 8 Jobs auf jeder CPU parallelisieren:
GNU Parallel erzeugt stattdessen einen neuen Prozess, wenn man fertig ist - die CPUs aktiv zu halten und damit Zeit zu sparen:
Installation
Für eine persönliche Installation ist kein Root-Zugriff erforderlich. Dies kann in 10 Sekunden geschehen:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Weitere Installationsoptionen finden Sie unter http://git.savannah.gnu.org/cgit/parallel.git/tree/README
Mehr erfahren
Weitere Beispiele finden Sie unter: http://www.gnu.org/software/parallel/man.html
Sehen Sie sich die Intro-Videos an: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Gehen Sie durch das Tutorial: http://www.gnu.org/software/parallel/parallel_tutorial.html
Melden Sie sich für die E-Mail-Liste an, um Unterstützung zu erhalten: https://lists.gnu.org/mailman/listinfo/parallel
parallel -N0 doit ::: {1..10}
{1..10}
funktioniert nicht in (t) csh / fish / ash, und das {1..10}
Konstrukt ist durch die Länge der Befehlszeile begrenzt, sodass dies nicht funktioniert: {1..1000000000}
wohingegen seq 1000000000
es gut funktioniert. Aber in den meisten Situationen {1..10}
wird es wie erwartet funktionieren, und das nutze ich auch oft.
Sie können eine for
Schleife im C-Stil verwenden , die gegenüber der Version mit geschweiften Klammern ( {1..5}
) den Vorteil hat , Variablen zum Angeben der Endpunkte verwenden zu können. Beide Versionen sind besser als die Verwendung eines externen Dienstprogramms ( seq
).
t=5
for ((x = 1; x <= t; x++))
do
xdotool click 1
done
Alles in einer Zeile:
t=5; for ((x = 1; x <= t; x++)); do xdotool click 1; done
Möglicherweise können Sie auch auf eine Schleife verzichten (für dieses spezielle Dienstprogramm und diese Funktion):
xdotool click --repeat 5 --delay 50 1
Sie können einfach den Befehl watch verwenden:
watch -n x <your command>
Ändern Sie x in Zeit in Sekunden.
Beispiel:
watch -n 1 xdotool click 1
Xdotool click 1 wird also alle 1 s wiederholt und beendet, wenn Sie fertig sind.