Ich habe einen inkrementellen Build-Befehl für mein Projekt, der etwas ausgibt, wenn ich einen sauberen Build durchführe, und etwas anderes (weniger) ausgibt, wenn ich einen inkrementellen Build durchführe.
Wie kann ich dies speichern, wenn ich bereits einen sauberen Build ausführe mycommand.sh
und die Ausgabe im Terminalfenster gedruckt wird (ohne Kopieren und Einfügen zu verwenden)?
Ich habe vergessen zu tun
mycommand.sh > myfile.txt
oder
mycommand.sh >> myfile.txt
zum Speichern der Ausgabe in einer Datei.
Antwort1
Während $(!!)
das erneute Ausführen des vorherigen Befehls eine Lösung zu sein scheint (oder manchmal auch ist), hat es auch seine Nachteile, die Sie berücksichtigen müssenvölligverstehen, es zu benutzen.
Beispiel: Wenn der Befehl einige Änderungen vorgenommen hat wie
rm -rv /tmp/*
tun wird, dann kann das erneute Ausführen dieses Befehls in irgendeiner Weisenichterzeugen dieselbe Ausgabe wie zuvor, mit der Ausnahme, dass die Ausgabe dieselbe sein sollte, wenn /tmp/ vor dem ersten Durchlauf leer war und beim zweiten Mal immer noch leer ist.
Fazit: Es gibt keinesicherMöglichkeit, die Ausgabe des letzten Befehls wiederzuverwenden oder zu speichern (ohne Kopieren und Einfügen), wenn Sie sie während der Ausführung des Befehls nicht gespeichert haben.
Antwort2
Das ist nicht möglich, da Bash keinem Parameter oder Block in seinem Speicher eine Ausgabe zuweist.
Sie können jedoch verwenden, $(!!)
umneu berechnen(nicht wiederverwenden) die Ausgabe des letzten Befehls.
Der !!
letzte Befehl wird von alleine ausgeführt.
$ echo pierre
pierre
$ echo my name is $(!!)
echo my name is $(echo pierre)
my name is pierre
Quelle:Wiederverwenden der Ausgabe des letzten Befehls in Bash