GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie führe ich einen Befehl mehrmals mit der Bash-Shell aus?

Lösung 1:

Ich glaube nicht, dass dafür ein Befehl oder eine Shell eingebaut ist, da es sich um eine triviale Teilmenge dessen handelt, was die Bourne-Shell for enthält loop ist dafür gedacht und das eigene Implementieren eines solchen Befehls ist daher recht einfach.

Verwenden Sie gemäß dem Vorschlag von JimB das Bash-Built zum Generieren von Sequenzen:

for i in {1..10}; do command; done

Für sehr alte Bash-Versionen können Sie den seq verwenden Befehl:

for i in `seq 10`; do command; done

Dies wird zehnmal wiederholt, indem command ausgeführt wird jedes Mal - es kann eine Pipe oder eine Reihe von Befehlen sein, die durch ; getrennt sind oder && . Sie können den $i verwenden Variable, um zu wissen, in welcher Iteration Sie sich befinden.

Wenn Sie diesen Einzeiler für ein Skript halten und daher aus irgendeinem nicht näher bezeichneten (aber vielleicht triftigen) Grund unerwünscht sind, können Sie ihn als Befehl implementieren, vielleicht so etwas wie das in Ihrer .bashrc (ungetestet):

#function run
run() {
    number=$1
    shift
    for i in `seq $number`; do
      [email protected]
    done
}

Verwendung:

run 10 command

Beispiel:

run 5 echo 'Hello World!'

Lösung 2:

ps aux | grep someprocess sieht so aus, als ob Sie Änderungen einer Sendung für eine festgelegte Zeit sehen möchten. Eduardo hat eine Antwort gegeben, die Ihre Frage genau beantwortet, aber es gibt eine Alternative:watch :

watch 'ps aux | grep someprocess'

Beachten Sie, dass ich den Befehl in einfache Anführungszeichen gesetzt habe, um zu vermeiden, dass die Shell den Befehl als „run watch ps aux“ interpretiert und das Ergebnis durch grep someprocess leitet . Eine andere Möglichkeit, den vorherigen Befehl auszuführen, wäre:

watch ps aux \| grep someprocess

Standardmäßig watch aktualisiert sich alle zwei Sekunden, das kann mit -n geändert werden Möglichkeit. Wenn Sie beispielsweise ein Intervall von 1 Sekunde haben möchten:

watch -n 1 'ps aux | grep someprocess'

Lösung 3:

Nur zum Spaß

pgrep ssh ;!!;!!;!!;!!;!!;!!

Lösung 4:

Versuchen Sie Folgendes:

yes ls | head -n5 | bash

Dies erfordert, dass der Befehl in einer Sub-Shell ausgeführt wird, was eine leichte Leistungseinbuße darstellt. YMMV. Grundsätzlich erhalten Sie den Befehl "yes", um die Zeichenfolge "ls" N-mal zu wiederholen; während "head -n5" die Schleife bei 5 Wiederholungen beendete. Die letzte Pipe sendet den Befehl an die Shell Ihrer Wahl.

Übrigens csh -ähnliche Shells haben einen eingebauten repeat Befehl. Sie könnten das verwenden, um Ihren Befehl in einer Bash-Sub-Shell auszuführen!

Lösung 5:

ähnlich den vorherigen Antworten, erfordert aber keine for-Schleife:

seq 10 | xargs -I -- echo "hello"

Pipe-Ausgabe von seq zu xargs ohne Argumente oder Optionen


Linux
  1. So führen Sie einen Linux-Befehl für immer alle X Sekunden aus oder wiederholen ihn

  2. So führen Sie einen einzelnen Befehl auf mehreren Remote-Systemen gleichzeitig aus

  3. [Linux] :So schließen Sie das Verzeichnis aus, wenn Sie den Shell-Befehl „tar“ verwenden

  4. So fügen Sie mehrere Routen in Linux mithilfe von ip-Befehlsbeispielen hinzu

  5. Wie führe ich ein Shell-Skript auf einer Unix-Konsole oder einem Mac-Terminal aus?

So führen Sie mehrere Linux-Befehle in einem einzigen Befehl aus

So führen Sie ein Bash-Skript aus

So führen Sie mehrere Linux-Befehle gleichzeitig im Linux-Terminal aus

Verwenden des Watch-Befehls unter Linux

Verwendung der Verlaufsfunktion in Bash Shell auf Ubuntu 16.04 LTS-Server

Wie bearbeite ich vorherige Zeilen in einem mehrzeiligen Befehl in Bash?