
Angenommen, ich habe einen Terminalbefehl namens foo
(in Wirklichkeit würde dieser so etwas wie cd
oder ls
oder etwas komplizierteres lauten. Gibt es eine Möglichkeit, diesen Befehl mehrmals auszuführen, OHNE ein Skript zu verwenden.
Ich möchte beispielsweise das Äquivalent des Folgenden tun:
foo && foo && foo && foo && foo
Gibt es eine Möglichkeit, dass ich etwas in der Art von
foo * 5
oder vielleicht
5:foo
Ich verwende eine Linux-Maschine.
Antwort1
Fügen Sie der Antwort des Bloggers ein Semikomma hinzu, um sie zu einem Einzeiler zu machen:
for variables in {1 2 3 4 5}; do ls; done
Antwort2
Blogger hat recht. Es ist jedoch wichtig, die Syntax genau zu beachten: Wenn Sie eine interaktive Shell verwenden (z. B. das Terminal),
echo -n; for i in {1..5}; do if [[ $? ]]; then foo; fi; done
das „$?“ gibt den Status des vorherigen Funktionsaufrufs zurück; da wir zuerst „echo“ aufrufen, wird die erste Iteration der Schleife „true“ sein (0 in Bash). Das „fi“ schließt die „if“-Anweisung ab und die Semikolons sind erforderlich.
Das Gleiche gilt, wenn Sie ein Bash-Skript schreiben:
#!/bin/bash
echo -n
für i in {1..5}; mache
wenn [[ $? ]]; dann
foo
fi
fertig
Ihnen wird auffallen, dass hinter „foo“ kein Semikolon steht. Beim Schreiben eines vollständigen Bash-Skripts in einer Umgebung, in der Zeilenumbrüche verfügbar sind (z. B. in Ihrem bevorzugten Texteditor), haben Zeilenumbrüche die gleiche Funktion wie Semikolons :)
Beachten Sie auch, dass Sie stattdessen verwenden könnten
[[ $? ]] && foo
anstelle der if-Anweisung; beachten Sie, dass && bedeutet, dass foo nur ausgeführt wird, wenn das vorherige foo keinen Fehler hatte. d. h. im Funktionsaufruf
thing1 && thing2
thing2 wird nur ausgeführt, wenn thing1 einwandfrei läuft (technisch gesehen, wenn es den Wert 0 zurückgibt). Um zu ignorieren, ob foo funktioniert oder nicht, verwenden Sie Semikolons anstelle von &&.
Antwort3
Sie können Folgendes versuchen:
for i in {1..10}; do YourCommand; done
Beispiel:
for i in {1..5}; do ls -l; done
Antwort4
Ich habe eine tolle Methode gefundenHier.
Ich weiß, dass es immer noch „eine Art Skript“ ist, aber ich denke, es kommt dem am nächsten, ohne eine ganze Befehlszeile einzugeben.
Sie können den Befehl erstellen, repeat
mit dem Sie dies tun können:
repeat 5 ./foo
Fügen Sie am Ende die folgenden Zeilen hinzu ~/.bashrc
(wenn Sie Bash verwenden):
repeat() {
n=$1
shift
while [ $(( n -= 1 )) -ge 0 ]
do
"$@"
done
}
und bei der nächsten Anmeldung (oder beim Starten von Bash) können Sie verwenden repeat 5 ./foo
.
Übrigens repeat
ist dies bereits ein Schlüsselwort (das genau dasselbe tut) in csh, tcsh und zsh. Mit dieser Ergänzung fügen Sie es also hinzu bash
und es wird genau gleich funktionieren.