Как мне выполнить программу X раз в терминале?
Я прочитал, что я должен сделать Tin bin / bash, но я не знаю, как выполнить это X раз.
Как мне выполнить программу X раз в терминале?
Я прочитал, что я должен сделать Tin bin / bash, но я не знаю, как выполнить это 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
С небольшим многословием и задержкой в 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
$
. Это просто там, чтобы указать приглашение оболочки, как sylvain@sylvain-ThinkPad-T430s:~$
. Мы обычно добавляем его в ответы командной строки, чтобы отличить команду от ее результатов.
#!/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 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 процессорах, прямой способ распараллеливания - запустить 8 заданий на каждом процессоре:
GNU Parallel вместо этого порождает новый процесс после его завершения - поддерживая процессоры активными и, таким образом, экономя время:
Установка
Персональная установка не требует 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
parallel -N0 doit ::: {1..10}
{1..10}
Не работает (т) CSH / рыба / золы, а {1..10}
конструкция ограничена длиной командной строки, так что это не будет работать: в {1..1000000000}
то время как seq 1000000000
будет работать нормально. Но для большинства ситуаций все {1..10}
будет работать как положено, и я тоже часто этим пользуюсь.
Вы можете использовать for
цикл в стиле C, который имеет преимущество перед версией (скобкой {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
Просто вы можете использовать команду watch:
watch -n x <your command>
измените x на время в секундах.
Пример :
watch -n 1 xdotool click 1
Таким образом, xdotool click 1 будет повторяться каждые 1 с, прекратите его, когда закончите.