Ich habe ein nicht wirklich freizügiges Programm, mit dem ich arbeiten kann. Leider erlaubt dieses Programm nicht nur Folgendes
"command -a -b -c"
oder
"command -abc"
Also muss ich immer folgendes eingeben
command -a && command -b && command -c
Ich bin mir ziemlich sicher, dass es einen effizienteren Weg gibt, das zu tippen, kann es aber nicht herausfinden.
command-line
Douda
quelle
quelle
cmd -a; cmd -b; cmd -c
lange Sicht daran halten, wie es alle Menschen tun.command
. Im allgemeinen Fallcommand -a -b -c
,command -abc
undcommand -a && command -b && command -c
haben unterschiedliche Bedeutung ..Antworten:
Du könntest es tun:
Oder:
mit einigen Muscheln.
Aber Vorsicht, dass es die stdin von beeinflusst
command
.Mit
zsh
:Oder einfach:
Keiner von diesen würde abgebrochen, wenn einer der
command
Aufrufe fehlschlägt (außer wenn er mit dem Exit-Status 255 fehlschlägt).Dafür möchten Sie:
Dies führt immer noch nicht zum
$?
Exit-Status des fehlgeschlagenencommand
Aufrufs. Sie können dies ändern in:Aber zu diesem Zeitpunkt ist es schon länger als:
quelle
Sie können auf das erste Wort der vorherigen Befehlszeile (
command
in Ihrem Fall) durch Verlaufserweiterung verweisen!!:0
und dann einfach die erforderlichen Argumente hinzufügen.Zum Beispiel:
Beachten Sie, dass dies, wie Stéphane Chazelas betont hat , auch zu unerwarteten Erweiterungen führen kann.
quelle
!!:0
(in Schalen , die CSH Geschichte Expansion unterstützt) wird auf das erste Wort der vorhergehenden command- erweitert Linie , nicht vorheriger Befehl.uname
und dannecho foobar && !!:0 spamegg && !!:0 baz
wird das erweitertecho foobar && uname spamegg && uname baz
.!
ist genug:!:0
aber mit @ StéphaneChazelas Punkten ist es besser, dort zu verwenden,!#:0
wo der!#
Mittelwert Die gesamte Befehlszeile, die bisher eingegeben wurde .Wie wäre es mit einer Shell-Funktion, die eine Schleife umschließt?
Wobei "Ding" der eigentliche Befehl ist, den Sie aufrufen möchten. Dann einfach
Sie können dies sogar auf einen beliebigen Befehl verallgemeinern:
Dann
quelle
Inmitten der kreativen und aufschlussreichen Antworten ist hier etwas Einfaches im Namen der Eingabe weniger Zeichen:
quelle
Erstellen Sie ein Shell-Skript MultiRun , das den ersten Parameter als Befehl verwendet und diesen mit den verbleibenden Parametern nacheinander ausführt .
./ MultiRun Curl ABCD
Ihr Skript sollte curl als Befehl verwenden und "curl A", "curl B", "curl C", "curl D" ausführen. Da Ihr Skript nun die Kontrolle hat, können Sie entscheiden, ob ein Fehler in einem Befehl das Skript beendet oder mit dem nächsten Parameter fortfährt oder auf Benutzereingaben wartet oder was auch immer. Sie können sogar den Exit-Status des gesamten Skripts basierend auf der Ausführung der einzelnen Befehle festlegen.
MultiRun Script kann ungefähr so aussehen:
Führen Sie nun Folgendes aus : ./MultiRun echo 1 2 3 4
, um die Ausgabe von "echo 1", "echo 2", "echo 3", "echo 4" wie folgt zu erhalten:
1
2
3
4
Es ist eine sehr flexible und wiederverwendbare Lösung.
quelle