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