Soluzione 1:
Non penso che esista un comando o una shell incorporata per questo, in quanto è un banale sottoinsieme di ciò che la shell Bourne for
loop è progettato per e implementare un comando come questo è quindi abbastanza semplice.
Secondo il suggerimento di JimB, usa l'integrato Bash per generare sequenze:
for i in {1..10}; do command; done
Per versioni molto vecchie di bash, puoi usare seq
comando:
for i in `seq 10`; do command; done
Questo ripete dieci volte l'esecuzione di command
ogni volta - può essere una pipe o una serie di comandi separati da ;
o &&
. Puoi usare il $i
variabile per sapere in quale iterazione ti trovi.
Se consideri questo one-liner uno script e quindi per qualche motivo non specificato (ma forse valido) indesiderabile puoi implementarlo come comando, forse qualcosa del genere sul tuo .bashrc (non testato):
#function run
run() {
number=$1
shift
for i in `seq $number`; do
[email protected]
done
}
Utilizzo:
run 10 command
Esempio:
run 5 echo 'Hello World!'
Soluzione 2:
ps aux | grep someprocess
sembra che tu voglia guardare i cambiamenti di un programma per un tempo prestabilito. Eduardo ha dato una risposta che risponde esattamente alla tua domanda, ma c'è un'alternativa:watch
:
watch 'ps aux | grep someprocess'
Nota che ho inserito il comando tra virgolette singole per evitare che la shell interpreti il comando come "run watch ps aux" e convogli il risultato attraverso grep someprocess
. Un altro modo per eseguire il comando precedente sarebbe:
watch ps aux \| grep someprocess
Per impostazione predefinita, watch
si aggiorna ogni due secondi, che può essere modificato utilizzando il -n
opzione. Ad esempio, se vuoi avere un intervallo di 1 secondo:
watch -n 1 'ps aux | grep someprocess'
Soluzione 3:
Solo per divertimento
pgrep ssh ;!!;!!;!!;!!;!!;!!
Soluzione 4:
Prova questo:
yes ls | head -n5 | bash
Ciò richiede che il comando venga eseguito in una sub-shell, una leggera penalità per le prestazioni. YMMV. Fondamentalmente, ottieni il comando "yes" per ripetere la stringa "ls" N volte; mentre "head -n5" ha terminato il ciclo a 5 ripetizioni. La pipe finale invia il comando alla shell di tua scelta.
Per inciso csh
-like shell hanno un repeat
integrato comando. Potresti usarlo per eseguire il tuo comando in una sub-shell bash!
Soluzione 5:
simile alle risposte precedenti, ma non richiede il ciclo for:
seq 10 | xargs -I -- echo "hello"
pipe l'output di seq in xargs senza argomenti o opzioni