Запустить программу X раз

18

Как выполнить программу X раз в терминале?

Я прочитал, что мне нужно сделать bin / bash txt, но я не знаю, как выполнить это X раз.

    
задан user3597989 12.09.2014 в 17:39
источник

6 ответов

23

Вы можете использовать xargs и seq . Как правило:

seq nr_of_times_to_repeat | xargs -Iz command

Например:

seq 10 | xargs -Iz xdotool click 1

будет выполнять команду xdotool click 1 в течение 10 раз.

    
ответ дан Radu Rădeanu 12.09.2014 в 18:41
11

Откройте терминал и используйте следующую команду 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 Pineau 12.09.2014 в 18:09
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
    
ответ дан Jacob Vlijm 12.09.2014 в 18:06
4

Вы можете использовать цикл стиля 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
    
ответ дан Dennis Williamson 12.09.2014 в 23:50
4

Если у вас есть 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

Другие варианты установки см. в разделе Ссылка

Подробнее

Дополнительные примеры: Ссылка

Смотрите видеоролики: Ссылка

Пройдите через учебник: Ссылка

Подпишитесь на список адресов электронной почты, чтобы получить поддержку: Ссылка

    
ответ дан Ole Tange 13.09.2014 в 11:21
0

Просто вы можете использовать команду watch:

watch -n x <your command>

измените x на время в секундах.

Пример:

watch -n 1 xdotool click 1 

Итак, xdotool click 1 будет повторяться каждые 1 с, прекратите его, когда закончите.

    
ответ дан nux 12.09.2014 в 21:32