Come eseguo un programma X volte nel terminale?
Ho letto che devo fare un bin / bash txt, ma non so come eseguire questa X volte.
Come eseguo un programma X volte nel terminale?
Ho letto che devo fare un bin / bash txt, ma non so come eseguire questa X volte.
Risposte:
Puoi usare xargseseq . Generalmente:
seq nr_of_times_to_repeat | xargs -Iz command
Per esempio:
seq 10 | xargs -Iz xdotool click 1
eseguirà il xdotool click 1comando per 10 volte.
Apri un Terminale e usa il seguente bashcomando:
for i in {1..5}; do xdotool click 1; done
Con un po 'di verbosità e 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
$. È lì solo per indicare un prompt della shell come sylvain@sylvain-ThinkPad-T430s:~$. Di solito lo aggiungiamo alle risposte della riga di comando per differenziare il comando dai suoi risultati.
#!/bin/bash
x=1
while [ $x -le 10 ]
do
<command to run>
x=$(( $x + 1 ))
done
dove 10 è il numero di volte per eseguire il comando
se hai bisogno di costruire in 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, sostituiscilo <command to run>con il tuo xdotoolcomando, 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
Dato che dici di usarlo per fare clic, il più semplice potrebbe essere usare xdotoolla propria opzione di ripetizione integrata. Il formato è:
xdotool click --delay <delay> --repeat <repeats> <button>
(delay in milliseconds between the clicks)
Per eseguire 10 clic del mouse (pulsante 1) in una riga, tra un secondo, il comando è:
xdotool click --delay 1000 --repeat 10 1
Se hai GNU Parallel puoi eseguire:
seq 10 | parallel -N0 doit
Tutti i nuovi computer dispongono di più core, ma la maggior parte dei programmi è di natura seriale e pertanto non utilizzerà più core. Tuttavia, molte attività sono estremamente parallelizzabili:
GNU Parallel è un parallelizzatore generale e semplifica l'esecuzione di 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 è quello di eseguire 8 lavori su ogni CPU:

GNU Parallel invece genera un nuovo processo al termine - mantenendo attive le CPU e risparmiando tempo:

Installazione
Un'installazione personale non richiede l'accesso come root. Si può fare in 10 secondi facendo questo:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Per altre opzioni di installazione consultare http://git.savannah.gnu.org/cgit/parallel.git/tree/README
Per saperne di più
Vedi altri esempi: http://www.gnu.org/software/parallel/man.html
Guarda i video introduttivi: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Segui il tutorial: http://www.gnu.org/software/parallel/parallel_tutorial.html
Iscriviti alla lista e-mail per ottenere supporto: https://lists.gnu.org/mailman/listinfo/parallel
parallel -N0 doit ::: {1..10}
{1..10}non funziona in (t) csh / pesce / cenere, e il {1..10}costrutto è limitata dalla lunghezza della linea di comando, quindi questo non funzionerà: {1..1000000000}che seq 1000000000funziona bene. Ma per la maggior parte delle situazioni {1..10}funzionerà come previsto, e spesso lo uso anche io.
È possibile utilizzare un forloop in stile C che presenta il vantaggio rispetto alla versione di espansione del controvento ( {1..5}) di poter utilizzare le variabili per specificare i punti finali. Entrambe le versioni sono migliori dell'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
Semplicemente puoi usare il comando watch:
watch -n x <your command>
cambia da x a tempo in secondi.
Esempio :
watch -n 1 xdotool click 1
Quindi xdotool click 1 verrà ripetuto ogni 1 s, terminandolo al termine.