TL; DR: alias @@='$($(fc -ln -1) |& tail -1)'
Bash'in tarih etkileşim tesisleri , komutların çıktısını incelemek için herhangi bir mekanizma sunmaz . Kabuk bunu depolamaz ve geçmiş genişletmesi özellikle kendiniz çalıştırdığınız komutlar veya bu komutların parçaları içindir.
Bu yapraklar hem son komutu yeniden çalıştırmadan ve borulama yaklaşım stdout'u ve stderr'yi ( |&komut ikamesi içine). heemayl'ın cevabı bunu başarır, ancak bir takma adda kullanılamaz çünkü kabuk takma adları genişletmeden önce tarih genişlemesi yapar ve sonra değil.
Tarih genişleme işleviyle etkinleştirerek bile bir kabuk işlevinde çalışmak için alamıyorum set -H. !!Bir fonksiyonda asla genişletilmeyeceğinden şüpheleniyorum ve eğer olsaydı neye genişletileceğini bilmiyorum, ama şu anda neden tam olarak neden olmadığından emin değilim .
Bu nedenle, bunu çok az yazarak yapabilmeniz için bir şeyler ayarlamak istiyorsanız , geçmiş komutundan son komutu çıkarmak için geçmiş genişletmesi yerine fckabuk yerleşimini kullanmalısınız. Bu, geçmiş genişletmesi devre dışı bırakıldığında bile çalışmasının ek avantajına sahiptir.
Görüldüğü gibi Gordon Davisson 'ın cevabı için bash geçmişi genişlemesini içeren bir takma ad oluşturma (on Super User ) $(fc -ln -1)Simülasyonu yapılan !!. Bu takarak !!içinde heemayl emri $(!! |& tail -1) verim:
$($(fc -ln -1) |& tail -1)
Bu şu şekilde çalışır, $(!! |& tail -1)ancak bir takma ad tanımında gidebilir:
alias @@='$($(fc -ln -1) |& tail -1)'
Eğer bu tanımı çalıştırmak veya koyun sonra .bash_aliasesya .bashrcyeni bir kabuk başlatmak, sadece yazabilirsiniz @@son komutun çıktısı son satırı yürütmek teşebbüs (veya takma adlı neyse).
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
....