Ich weiß, dass ich den folgenden Befehl ausführen kann
ls Some{File,Folder}
Und das ist gleichbedeutend mit:
ls SomeFile SomeFolder
(Ich benutze es auch oft für Dinge wie mv place_{a,b}
)
Ich habe mich jedoch gefragt, ob es eine andere Verknüpfung gibt, mit der ich so etwas tun kann:
run-command --a --whole --lot --of --flags parameter a; \
run-command --a --whole --lot --of --flags parameter b
Und ich musste nur tippen run-command --a --whole --lot --of --flags parameter {a,b}
oder ähnliches.
shell
command-line
scripting
asch
quelle
quelle
run-command
, dass viele Unix-Befehle mehrere Dateiargumente nacheinander verarbeiten.Antworten:
Angenommen, Sie verwenden GNU
bash
oder ähnliches:Vielleicht eine
for
Schleife?was auch in einer Zeile geschrieben werden kann als
for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done
quelle
for x in {a..z}; do ; run-command --a --whole --lot --of --flags parameter $x ; done
{a..z}
,*.pdf
,$(find ...)
...;
folgendedo
Schlüsselwort entfernt wurde.;
.Wenn Sie dieses Skript nicht schreiben und es einfach über eine Befehlszeile ausführen möchten, ist der
xargs
Befehl wahrscheinlich genau das, wonach Sie suchen.xargs verwendet eine Reihe von Inhalten aus der Standardeingabe und verwendet sie als Argumente für einen Befehl, wobei dieser Befehl bei Bedarf mehrmals ausgeführt wird.
Versuche Folgendes:
In diesem Beispiel geben Sie xargs einfach die Permutationen, die ausgeführt werden sollen.
Das Flag "-n 1" weist xargs an, nur 1 der Argumente pro Lauf zu verwenden.
Das Flag "-d" weist xargs an, nach einem "," in der Eingabe als Trennzeichen zwischen den auszuführenden Argumenten zu suchen. (Wenn das Argument ein "," enthält, müssen Sie dies in etwas anderes ändern. Wenn Ihre Argumente keine Leerzeichen enthalten, können Sie dieses Flag ganz weglassen.)
Siehe
man xargs
für weitere Informationen.quelle
Sie können auch eine Funktion verwenden, die Sie nicht darauf beschränkt, Ihr Argument am Ende zu ändern:
quelle
Sie können Ersetzungen im vorherigen Befehl ausführen. Dies funktioniert in Ihrem Beispiel {a, b} nicht, da alle Instanzen von "a" durch ein "b" ersetzt werden. Stellen Sie sich jedoch vor, Sie möchten die folgenden Befehle ausführen:
Sie können es mit tun
Bash wird die Auswechslung vornehmen und ausführen
Verwenden Sie gs (globale Ersetzung), um mehrere Ersetzungen durchzuführen, nicht nur eine.
quelle
alias
In bash gibt es einen Befehl:Die Verwendung ist:
$ shotcommand a
quelle