Esegui un programma X volte

18

Come posso eseguire un programma X volte nel terminale?

Ho letto che devo fare un bin / bash txt, ma non so come eseguire questa X volte.

    
posta user3597989 12.09.2014 - 17:39

6 risposte

23

Puoi utilizzare xargs e seq . In generale:

seq nr_of_times_to_repeat | xargs -Iz command

Ad esempio:

seq 10 | xargs -Iz xdotool click 1

eseguirà il comando xdotool click 1 per 10 volte.

    
risposta data Radu Rădeanu 12.09.2014 - 18:41
11

Apri un terminale e utilizza il seguente comando bash :

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

Con un po 'di verbosità e un ritardo di 1 secondo:

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
    
risposta data Sylvain Pineau 12.09.2014 - 18:09
5

Questo dovrebbe fare:

#!/bin/bash

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

dove 10 è il numero di volte in cui eseguire il comando

se hai bisogno di costruire una piccola pausa:

#!/bin/bash

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

Copia lo script in un file vuoto, sostituisci <command to run> con il tuo comando xdotool , salvalo come run_xdotool.sh , eseguilo con il comando:

sh /path/to/run_xdotool.sh

In alternativa, puoi renderlo eseguibile e semplicemente eseguirlo

/path/to/run_xdotool.sh

Un'altra soluzione: usare l'opzione di ripetizione incorporata di xdotool

Dato che hai menzionato di usarlo per fare clic, il più semplice potrebbe essere utilizzare l'opzione di ripetizione incorporata di xdotool . Il formato è:

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

Per fare 10 clic del mouse (pulsante 1) di seguito, un secondo in mezzo, il comando è:

xdotool click --delay 1000 --repeat 10 1
    
risposta data Jacob Vlijm 12.09.2014 - 18:06
4

È possibile utilizzare un ciclo for di stile C che presenta il vantaggio rispetto alla versione di espansione delle controventi ( {1..5} ) di essere in grado di utilizzare le variabili per specificare i punti finali. Entrambe le versioni sono migliori rispetto all'utilizzo di un'utilità esterna ( seq ).

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

Tutto su una riga:

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

Oppure potresti essere in grado di farlo senza un ciclo (per questa specifica utilità e funzione):

xdotool click --repeat 5 --delay 50 1
    
risposta data Dennis Williamson 12.09.2014 - 23:50
4

Se hai GNU Parallel puoi eseguire:

seq 10 | parallel -N0 doit

Tutti i nuovi computer hanno più core, ma la maggior parte dei programmi sono di natura seriale e quindi non utilizzeranno più core. Tuttavia, molte attività sono estremamente parallelizzabili:

  • Esegui lo stesso programma su molti file
  • Esegui lo stesso programma per ogni riga in un file
  • Esegui lo stesso programma per ogni blocco in un file

GNU Parallel è un parallelizzatore generale e rende facile eseguire i lavori in parallelo sulla stessa macchina o su più macchine a cui hai accesso SSH.

Se hai 32 lavori diversi che vuoi eseguire su 4 CPU, un modo semplice per parallelizzare è eseguire 8 lavori su ciascuna CPU:

GNU Parallel invece genera un nuovo processo quando si finisce - mantenendo le CPU attive e risparmiando così tempo:

Installazione

Un'installazione personale non richiede l'accesso come root. Può essere fatto in 10 secondi in questo modo:

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

Per altre opzioni di installazione, consulta link

Ulteriori informazioni

Vedi altri esempi: link

Guarda i video introduttivi: link

Segui il tutorial: link

Iscriviti alla mailing list per ottenere supporto: link

    
risposta data Ole Tange 13.09.2014 - 11:21
0

Semplicemente puoi usare il comando watch:

watch -n x <your command>

cambia x al tempo in secondi.

Esempio:

watch -n 1 xdotool click 1 

Quindi il xdotool clic 1 sarà ripetuto ogni 1 s, terminandolo quando hai finito.

    
risposta data nux 12.09.2014 - 21:32

Leggi altre domande sui tag