Dies ist eine wirklich hackige Lösung, aber sie scheint meistens manchmal zu funktionieren. Während des Testens bemerkte ich, dass es manchmal nicht sehr gut funktionierte, wenn ich ein ^C erhielt auf der Befehlszeile, obwohl ich es ein bisschen optimiert habe, um mich ein bisschen besser zu verhalten.
Dieser Hack ist nur ein interaktiver Modus-Hack, und ich bin mir ziemlich sicher, dass ich ihn niemandem empfehlen würde. Hintergrundbefehle verursachen wahrscheinlich noch weniger definiertes Verhalten als normal. Die anderen Antworten sind eine bessere Möglichkeit, programmgesteuert Ergebnisse zu erzielen.
Davon abgesehen, hier ist die "Lösung":
PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'
Legen Sie diese Bash-Umgebungsvariable fest und geben Sie die gewünschten Befehle aus. $LAST
wird normalerweise die Ausgabe haben, nach der Sie suchen:
startide seth> fortune
Courtship to marriage, as a very witty prologue to a very dull play.
-- William Congreve
startide seth> echo "$LAST"
Courtship to marriage, as a very witty prologue to a very dull play.
-- William Congreve
Ich kenne keine Variable, die das automatisch macht . Um etwas anderes zu tun, als nur das Ergebnis zu kopieren und einzufügen, können Sie alles, was Sie gerade getan haben, erneut ausführen, zB
vim $(!!)
Wobei !!
ist eine History-Erweiterung, die 'der vorherige Befehl' bedeutet.
Wenn Sie erwarten, dass ein einzelner Dateiname Leerzeichen oder andere Zeichen enthält, die eine ordnungsgemäße Analyse der Argumente verhindern könnten, zitieren Sie das Ergebnis (vim "$(!!)"
). Wenn Sie es nicht in Anführungszeichen setzen, können mehrere Dateien gleichzeitig geöffnet werden, solange sie keine Leerzeichen oder andere Shell-Parsing-Token enthalten.