Execute um programa X vezes

18

Como executo um programa X vezes no terminal?

Eu li que tenho que fazer um bin / bash txt, mas não sei como executar este X vezes.

    
por user3597989 12.09.2014 / 17:39

6 respostas

23

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 comando xdotool click 1 por 10 vezes.

    
por Radu Rădeanu 12.09.2014 / 18:41
11

Abra um Terminal e use o seguinte comando bash :

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
    
por Sylvain Pineau 12.09.2014 / 18:09
5

Isso deve ser feito:

#!/bin/bash

x=1
while [ $x -le 10 ]
do
  <command to run>
  x=$(( $x + 1 ))
done

em que 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 comando xdotool , 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 por

/path/to/run_xdotool.sh

Outra solução: usando a opção de repetição interna do xdotool

Como você mencionou o uso para cliques, o mais fácil pode ser usar a opção de repetição interna do próprio xdotool . O formato é:

xdotool click --delay <delay> --repeat <repeats> <button>
(delay in milliseconds between the clicks)

Para fazer 10 cliques do mouse (botão 1) em uma linha, um segundo entre eles, o comando é:

xdotool click --delay 1000 --repeat 10 1
    
por Jacob Vlijm 12.09.2014 / 18:06
5

Se você tem o GNU Parallel, você pode executar:

seq 10 | parallel -N0 doit

Todos os novos computadores têm vários núcleos, mas a maioria dos programas são de natureza serial e, portanto, não usam os vários núcleos. No entanto, muitas tarefas são extremamente paralelizáveis:

  • Execute o mesmo programa em muitos arquivos
  • Execute o mesmo programa para cada linha em um arquivo
  • Execute o mesmo programa para cada bloco em um arquivo

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 para as quais você tem acesso ssh.

Se você tem 32 tarefas diferentes que você quer rodar em 4 CPUs, uma forma direta de paralelizar é rodar 8 tarefas em cada processador:

O

GNUParallelgeraumnovoprocessoquandoumtermina-mantendoasCPUsativaseeconomizandotempo:

Instalação

Uma instalação pessoal não requer acesso root. Isso pode ser feito em 10 segundos ao fazer isso:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Para outras opções de instalação, consulte o link

Saiba mais

Veja mais exemplos: link

Assista aos vídeos de introdução: link

Percorra o tutorial: link

Inscreva-se na lista de e-mail para obter suporte: link

    
por Ole Tange 13.09.2014 / 11:21
4

Você pode usar um loop for de estilo C que tem a vantagem sobre a versão de expansão de chave ( {1..5} ) de poder usar variáveis para especificar os pontos finais. Qualquer versão é melhor 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 talvez você possa fazer isso sem um loop (para esse utilitário e função específicos):

xdotool click --repeat 5 --delay 50 1
    
por Dennis Williamson 12.09.2014 / 23:50
0

Você pode simplesmente usar o comando watch:

watch -n x <your command>

altere x para o tempo em segundos.

Exemplo:

watch -n 1 xdotool click 1 

Então o xdotool click 1 será repetido a cada 1 s, terminado quando terminar.

    
por nux 12.09.2014 / 21:32