Jak wykonać program X razy w terminalu?
Czytam, że muszę zrobić bin / bash txt, ale nie wiem, jak wykonać X razy.
Jak wykonać program X razy w terminalu?
Czytam, że muszę zrobić bin / bash txt, ale nie wiem, jak wykonać X razy.
Odpowiedzi:
Możesz użyć xargsi seq. Ogólnie:
seq nr_of_times_to_repeat | xargs -Iz command
Na przykład:
seq 10 | xargs -Iz xdotool click 1
wykona xdotool click 1polecenie 10 razy.
Otwórz terminal i użyj następującego bashpolecenia:
for i in {1..5}; do xdotool click 1; done
Z odrobiną gadatliwości i opóźnieniem 1s:
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
$. Jest tylko tam, aby wskazać znak zachęty powłoki sylvain@sylvain-ThinkPad-T430s:~$. Zazwyczaj dodajemy go do odpowiedzi z wiersza poleceń, aby odróżnić polecenie od jego wyników.
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
x=$(( $x + 1 ))
done
gdzie 10 to liczba uruchomień polecenia
jeśli chcesz zbudować małą przerwę:
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
sleep 1
x=$(( $x + 1 ))
done
Skopiuj skrypt do pustego pliku, zastąp <command to run>go xdotoolpoleceniem, zapisz jako run_xdotool.sh, uruchom go poleceniem:
sh /path/to/run_xdotool.sh
Alternatywnie możesz uczynić go wykonywalnym i po prostu uruchomić
/path/to/run_xdotool.sh
Ponieważ wspomniałeś o używaniu go do robienia kliknięć, najłatwiej może być użyć xdotoolwłasnej wbudowanej opcji powtarzania. Format to:
xdotool click --delay <delay> --repeat <repeats> <button>
(delay in milliseconds between the clicks)
Aby wykonać 10 kliknięć myszką (przycisk 1) w rzędzie, jedna sekunda pomiędzy nimi, polecenie:
xdotool click --delay 1000 --repeat 10 1
Jeśli masz GNU Parallel, możesz uruchomić:
seq 10 | parallel -N0 doit
Wszystkie nowe komputery mają wiele rdzeni, ale większość programów ma charakter szeregowy i dlatego nie będzie używać wielu rdzeni. Jednak wiele zadań można bardzo zrównoleglać:
GNU Parallel to ogólny paralelizator, który ułatwia równoległe uruchamianie zadań na tej samej maszynie lub na wielu maszynach, do których masz dostęp ssh.
Jeśli masz 32 różne zadania, które chcesz uruchomić na 4 procesorach, prostym sposobem na zrównoleglenie jest uruchomienie 8 zadań na każdym procesorze:

Zamiast tego GNU Parallel odradza nowy proces po zakończeniu - utrzymując procesory aktywne, a tym samym oszczędzając czas:

Instalacja
Instalacja osobista nie wymaga dostępu do konta root. Można to zrobić w 10 sekund, wykonując następujące czynności:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Inne opcje instalacji można znaleźć na stronie http://git.savannah.gnu.org/cgit/parallel.git/tree/README
Ucz się więcej
Zobacz więcej przykładów: http://www.gnu.org/software/parallel/man.html
Obejrzyj filmy wprowadzające: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Przejrzyj samouczek: http://www.gnu.org/software/parallel/parallel_tutorial.html
Zarejestruj się, aby uzyskać listę e-mail, aby uzyskać pomoc: https://lists.gnu.org/mailman/listinfo/parallel
parallel -N0 doit ::: {1..10}
{1..10}Nie działa w (t) csh / ryb / popiół, a {1..10}konstrukt jest ograniczona przez długość linii polecenia, zatem nie będzie działać: {1..1000000000}natomiast seq 1000000000będzie działać prawidłowo. Ale w większości sytuacji {1..10}będzie działać zgodnie z oczekiwaniami, a ja często tego używam.
Można użyć forpętli w stylu C, która ma tę przewagę nad wersją nawiasów klamrowych ( {1..5}), że może używać zmiennych do określania punktów końcowych. Każda wersja jest lepsza niż użycie zewnętrznego narzędzia ( seq).
t=5
for ((x = 1; x <= t; x++))
do
xdotool click 1
done
Wszystko w jednej linii:
t=5; for ((x = 1; x <= t; x++)); do xdotool click 1; done
Lub możesz to zrobić bez pętli (dla tego konkretnego narzędzia i funkcji):
xdotool click --repeat 5 --delay 50 1
Po prostu możesz użyć polecenia obserwuj:
watch -n x <your command>
zmień x na czas w sekundach.
Przykład:
watch -n 1 xdotool click 1
Tak więc xdotool kliknięcie 1 będzie powtarzane co 1 s, zakończ je po zakończeniu.