TL; DR: alias @@='$($(fc -ln -1) |& tail -1)'
Fasilitas interaksi sejarah Bash tidak menawarkan mekanisme untuk memeriksa output dari perintah. Shell tidak menyimpannya , dan ekspansi histori khusus untuk perintah yang Anda jalankan sendiri, atau bagian dari perintah itu.
Ini meninggalkan pendekatan rerunning perintah terakhir dan memipatkan stdout dan stderr ( |&) ke dalam substitusi perintah. Jawaban heemayl mencapai ini, tetapi tidak dapat digunakan dalam alias karena shell melakukan ekspansi sejarah sebelum memperluas alias, dan bukan setelahnya.
Saya tidak bisa mendapatkan ekspansi sejarah untuk berfungsi dalam fungsi shell, bahkan dengan mengaktifkannya di fungsi dengan set -H. Saya curiga !!dalam suatu fungsi tidak akan pernah diperluas, dan saya tidak yakin apa yang akan diperluas jika itu terjadi, tetapi saat ini saya tidak yakin persis mengapa tidak.
Oleh karena itu, jika Anda ingin mengatur hal-hal sehingga Anda dapat melakukan ini dengan mengetik sangat sedikit, Anda harus menggunakan fcshell builtin alih-alih ekspansi sejarah untuk mengekstrak perintah terakhir dari sejarah. Ini memiliki keuntungan tambahan yang berfungsi bahkan ketika ekspansi sejarah dinonaktifkan.
Seperti ditunjukkan dalam Gordon Davisson 's jawaban untuk Membuat alias mengandung ekspansi bash sejarah (pada Super User ), $(fc -ln -1)mensimulasikan !!. Memasukkan ini ke dalam !!dalam perintah heemayl $(!! |& tail -1) menghasilkan:
$($(fc -ln -1) |& tail -1)
Ini berfungsi seperti $(!! |& tail -1)tetapi dapat masuk dalam definisi alias:
alias @@='$($(fc -ln -1) |& tail -1)'
Setelah Anda menjalankan definisi itu, atau memasukkannya ke dalam .bash_aliasesatau .bashrcdan memulai shell baru, Anda cukup mengetik @@(atau apa pun yang Anda bernama alias) untuk mencoba untuk mengeksekusi baris terakhir dari output dari perintah terakhir.
ek@Io:~$ alias @@='$($(fc -ln -1) |& tail -1)'
ek@Io:~$ evolution
The program 'evolution' is currently not installed. You can install it by typing:
sudo apt-get install evolution
ek@Io:~$ @@
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
evolution-common evolution-data-server evolution-data-server-online-accounts
....