Ejecuta un programa X veces

18

¿Cómo ejecuto un programa X veces en la terminal?

Leí que tengo que hacer bin / bash txt, pero no sé cómo ejecutar esto X veces.

    
pregunta user3597989 12.09.2014 - 15:39

6 respuestas

23

Puede usar xargs y seq . En general:

seq nr_of_times_to_repeat | xargs -Iz command

Por ejemplo:

seq 10 | xargs -Iz xdotool click 1

ejecutará el comando xdotool click 1 por 10 veces.

    
respondido por el Radu Rădeanu 12.09.2014 - 16:41
11

Abra una Terminal y use el siguiente comando bash :

for i in {1..5}; do xdotool click 1; done

Con un poco de verbosidad y 1s retraso:

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
    
respondido por el Sylvain Pineau 12.09.2014 - 16:09
5

Esto debería hacer:

#!/bin/bash

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

donde 10 es la cantidad de veces que se ejecuta el comando

si necesita construir en un pequeño descanso:

#!/bin/bash

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

Copie la secuencia de comandos en un archivo vacío, reemplace <command to run> por su comando xdotool , guárdelo como run_xdotool.sh , ejecútelo con el comando:

sh /path/to/run_xdotool.sh

Alternativamente, puedes hacerlo ejecutable y simplemente ejecutarlo

/path/to/run_xdotool.sh

Otra solución: usar la opción de repetición incorporada de xdotool

Como mencionas que debes usarlo para hacer clics, lo más fácil podría ser utilizar la opción de repetición incorporada de xdotool . El formato es:

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

Para hacer 10 clics del mouse (botón 1) en una fila, un segundo entre ellos, el comando es:

xdotool click --delay 1000 --repeat 10 1
    
respondido por el Jacob Vlijm 12.09.2014 - 16:06
4

Puede usar un bucle de estilo C for C que tiene la ventaja sobre la versión de expansión de llave ( {1..5} ) de poder usar variables para especificar los puntos finales. Cualquiera de las versiones es mejor que usar una utilidad externa ( seq ).

t=5
for ((x = 1; x <= t; x++))
do
    xdotool click 1
done

Todo en una línea:

t=5; for ((x = 1; x <= t; x++)); do xdotool click 1; done

O tal vez puedas hacerlo sin un bucle (para esta utilidad y función específicas):

xdotool click --repeat 5 --delay 50 1
    
respondido por el Dennis Williamson 12.09.2014 - 21:50
4

Si tiene GNU Parallel puede ejecutar:

seq 10 | parallel -N0 doit

Todas las computadoras nuevas tienen núcleos múltiples, pero la mayoría de los programas son de naturaleza serial y, por lo tanto, no usarán los múltiples núcleos. Sin embargo, muchas tareas son extremadamente paralelables:

  • Ejecuta el mismo programa en muchos archivos
  • Ejecuta el mismo programa para cada línea en un archivo
  • Ejecuta el mismo programa para cada bloque en un archivo

GNU Parallel es un paralelizador general y hace que sea fácil ejecutar trabajos en paralelo en la misma máquina o en varias máquinas a las que tiene acceso ssh.

Si tiene 32 trabajos diferentes que desea ejecutar en 4 CPU, una forma directa de paralelizar es ejecutar 8 trabajos en cada CPU:

GNU Parallel genera un nuevo proceso cuando uno finaliza, manteniendo las CPU activas y ahorrando tiempo:

Instalación

Una instalación personal no requiere acceso raíz. Se puede hacer en 10 segundos al hacer esto:

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

Para otras opciones de instalación, consulte enlace

Más información

Vea más ejemplos: enlace

Mira los videos introductorios: enlace

Recorra el tutorial: enlace

Regístrese en la lista de correo electrónico para obtener asistencia: enlace

    
respondido por el Ole Tange 13.09.2014 - 09:21
0

Simplemente puede usar el comando de vigilancia:

watch -n x <your command>

cambia x a tiempo en segundos.

Ejemplo:

watch -n 1 xdotool click 1 

Entonces, el clic de xdotool 1 se repetirá cada 1 s, finalizará cuando haya terminado.

    
respondido por el nux 12.09.2014 - 19:32

Lea otras preguntas en las etiquetas