GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire un comando più volte, usando bash shell?

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


Linux
  1. Come eseguire o ripetere un comando Linux ogni X secondi per sempre

  2. Come aggiungere più percorsi in Linux usando esempi di comandi ip

  3. Come configurare la shell Bash con restrizioni in Linux

  4. Come eseguire uno script di shell su una console Unix o un terminale Mac?

  5. Come posso trovare la mia versione della shell usando un comando Linux?

Come eseguire più comandi Linux in un unico comando

Come eseguire uno script Bash

Come eseguire più comandi Linux contemporaneamente nel terminale Linux

Utilizzo del comando Watch in Linux

Utilizzo della funzione di cronologia su Bash Shell su Ubuntu 16.04 LTS Server

Come posso modificare le righe precedenti in un comando a più righe in Bash?