Як виконати програму X разів у терміналі?
Я читав, що я повинен робити bin / bash txt, але не знаю, як виконати цей X раз.
Як виконати програму X разів у терміналі?
Я читав, що я повинен робити bin / bash txt, але не знаю, як виконати цей 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, ви можете запустити:
seq 10 | parallel -N0 doit
Усі нові комп’ютери мають декілька ядер, але більшість програм мають серійний характер і тому не використовуватимуть декілька ядер. Однак багато завдань є надзвичайно паралельними:
GNU Parallel є загальним паралелізатором і дозволяє легко виконувати завдання паралельно на одній машині або на декількох машинах, до яких ви маєте доступ ssh.
Якщо у вас є 32 різні завдання, які ви хочете запустити на 4 процесорах, прямим способом паралелізації є виконання 8 завдань на кожному процесорі:

GNU Parallel натомість породжує новий процес, коли закінчується - підтримуючи активні процесори та заощаджуючи час:

Установка
Особиста установка не вимагає доступу до кореня. Це можна зробити за 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}не працює в (t) csh / fish / ash, а {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>
змінити х на час у секундах.
Приклад:
watch -n 1 xdotool click 1
Отже xdotool click 1 повторюватиметься кожні 1 с, припиняйте його, коли закінчите.