Questa è una soluzione davvero confusa, ma sembra funzionare per lo più a volte. Durante i test, ho notato che a volte non funzionava molto bene quando ricevevo un ^C sulla riga di comando, anche se l'ho modificato un po 'per comportarsi un po' meglio.
Questo hack è solo un hack in modalità interattiva e sono abbastanza fiducioso che non lo consiglierei a nessuno. È probabile che i comandi in background causino un comportamento ancora meno definito del normale. Le altre risposte sono un modo migliore per ottenere risultati in modo programmatico.
Detto questo, ecco la "soluzione":
PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'
Imposta questa variabile ambientale bash ed emette i comandi come desiderato. $LAST
di solito avrà l'output che stai cercando:
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
Non conosco alcuna variabile che lo faccia automaticamente . Per fare qualcosa oltre al semplice copia-incolla del risultato, puoi rieseguire qualsiasi cosa tu abbia appena fatto, ad esempio
vim $(!!)
Dove !!
è l'espansione della cronologia che significa 'il comando precedente'.
Se ti aspetti che ci sia un singolo nome file con spazi o altri caratteri che potrebbero impedire la corretta analisi degli argomenti, cita il risultato (vim "$(!!)"
). Lasciarlo senza virgolette consentirà l'apertura di più file contemporaneamente purché non includano spazi o altri token di analisi della shell.