Como executo um programa X vezes no terminal?
Eu li que tenho que fazer um bin / bash txt, mas não sei como executar isso X vezes.
Como executo um programa X vezes no terminal?
Eu li que tenho que fazer um bin / bash txt, mas não sei como executar isso X vezes.
Respostas:
Você pode usar xargs
e seq
. Geralmente:
seq nr_of_times_to_repeat | xargs -Iz command
Por exemplo:
seq 10 | xargs -Iz xdotool click 1
executará o xdotool click 1
comando 10 vezes.
Abra um terminal e use o seguinte bash
comando:
for i in {1..5}; do xdotool click 1; done
Com um pouco de verbosidade e atraso de 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
$
. Está lá apenas para indicar um prompt de shell como sylvain@sylvain-ThinkPad-T430s:~$
. Geralmente, o adicionamos às respostas da linha de comando para diferenciar o comando de seus resultados.
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
x=$(( $x + 1 ))
done
onde 10 é o número de vezes para executar o comando
se você precisar criar uma pequena pausa:
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
sleep 1
x=$(( $x + 1 ))
done
Copie o script em um arquivo vazio, substitua <command to run>
pelo seu xdotool
comando, salve-o como run_xdotool.sh
, execute-o pelo comando:
sh /path/to/run_xdotool.sh
Como alternativa, você pode torná-lo executável e simplesmente executá-lo
/path/to/run_xdotool.sh
Como você menciona usá-lo para fazer cliques, o mais fácil pode ser usar xdotool
a própria opção de repetição interna. O formato é:
xdotool click --delay <delay> --repeat <repeats> <button>
(delay in milliseconds between the clicks)
Para fazer 10 cliques do mouse (botão 1) seguidos, com um segundo de intervalo, o comando é:
xdotool click --delay 1000 --repeat 10 1
Se você possui o GNU Parallel, você pode executar:
seq 10 | parallel -N0 doit
Todos os novos computadores possuem múltiplos núcleos, mas a maioria dos programas é de natureza serial e, portanto, não usa os múltiplos núcleos. No entanto, muitas tarefas são extremamente paralelizáveis:
O GNU Parallel é um paralelizador geral e facilita a execução de trabalhos em paralelo na mesma máquina ou em várias máquinas às quais você tem acesso ssh.
Se você tiver 32 tarefas diferentes que deseja executar em 4 CPUs, uma maneira direta de paralelizar é executar 8 tarefas em cada CPU:
O GNU Parallel gera um novo processo quando se termina - mantendo as CPUs ativas e economizando tempo:
Instalação
Uma instalação pessoal não requer acesso root. Isso pode ser feito em 10 segundos, fazendo o seguinte:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Para outras opções de instalação, consulte http://git.savannah.gnu.org/cgit/parallel.git/tree/README
Saber mais
Veja mais exemplos: http://www.gnu.org/software/parallel/man.html
Assista aos vídeos de introdução: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Percorra o tutorial: http://www.gnu.org/software/parallel/parallel_tutorial.html
Inscreva-se na lista de e-mails para obter suporte: https://lists.gnu.org/mailman/listinfo/parallel
parallel -N0 doit ::: {1..10}
{1..10}
não funciona em (t) csh / fish / ash, e a {1..10}
construção é limitada pelo comprimento da linha de comando, portanto, isso não funciona: ao {1..1000000000}
passo seq 1000000000
que funcionará bem. Mas para a maioria das situações {1..10}
funcionará como esperado, e eu também uso isso frequentemente.
Você pode usar um for
loop de estilo C que tem a vantagem sobre a versão brace-expansion ( {1..5}
) de poder usar variáveis para especificar os pontos finais. Qualquer uma das versões é melhor do que usar um utilitário externo ( seq
).
t=5
for ((x = 1; x <= t; x++))
do
xdotool click 1
done
Tudo em uma linha:
t=5; for ((x = 1; x <= t; x++)); do xdotool click 1; done
Ou você pode fazê-lo sem um loop (para este utilitário e função específicos):
xdotool click --repeat 5 --delay 50 1
Simplesmente você pode usar o comando watch:
watch -n x <your command>
mude x para o tempo em segundos.
Exemplo:
watch -n 1 xdotool click 1
Portanto, o xdotool click 1 será repetido a cada 1 s, encerre-o quando terminar.