Ini adalah solusi yang benar-benar meretas, tetapi tampaknya sebagian besar berhasil beberapa waktu. Selama pengujian, saya perhatikan terkadang tidak bekerja dengan baik saat mendapatkan ^C pada baris perintah, meskipun saya melakukan tweak sedikit untuk berperilaku sedikit lebih baik.
Peretasan ini hanya merupakan peretasan mode interaktif, dan saya cukup yakin bahwa saya tidak akan merekomendasikannya kepada siapa pun. Perintah latar belakang cenderung menyebabkan perilaku yang kurang jelas dari biasanya. Jawaban lainnya adalah cara yang lebih baik untuk mendapatkan hasil secara terprogram.
Karena itu, inilah "solusinya":
PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'
Setel variabel lingkungan bash ini dan keluarkan perintah sesuai keinginan. $LAST
biasanya akan memiliki keluaran yang Anda cari:
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
Saya tidak tahu variabel apa pun yang melakukan ini secara otomatis . Untuk melakukan sesuatu selain hanya menyalin-tempel hasilnya, Anda dapat menjalankan kembali apa pun yang baru saja Anda lakukan, misalnya
vim $(!!)
Dimana !!
adalah perluasan riwayat yang berarti 'perintah sebelumnya'.
Jika Anda berharap ada satu nama file dengan spasi atau karakter lain di dalamnya yang mungkin mencegah penguraian argumen yang tepat, kutip hasilnya (vim "$(!!)"
). Membiarkannya tanpa tanda kutip akan memungkinkan banyak file dibuka sekaligus selama tidak menyertakan spasi atau token parsing shell lainnya.