Yanıtlar:
!!
tek başına yürütmek, önceki komutunuzu kaydedildiği gibi çalıştırır history
. Ek olarak, yapmak !-1
, !-2
vb. Son komutunuzu, ikinci son komutunuzu vb. Çalıştırır. Kullanışlı!
!<command>
son olayı ~/.bash_history
başlatacak<command>
!
Kopyalanan bu aptal bash olayı, tcsh
her zamankinden daha fazla beni mahvetti. Çift tırnak, yorumundan korunmaz !
. $ foo "!bar"
-> !bar: event not found
.
cevap :sudo !!
önceki komutu tekrar artan ayrıcalıklarla tekrarlamak için doğrudan girersiniz .
düzenleme: reddit yoluyla bulunan görüntü , ve Randall Munroe tarafından orijinal xkcd çizgi roman bir parodisi .
Eski komutlarınız arasında gezinmek ve yeniden yazmak / değiştirmek ve sudo
önüne eklemek için yukarı ok tuşunu deneyebilirsiniz . (ok tuşlarının üzerindeki ana sayfa düğmesi konumu başlangıcına ayarlar.)
sudo !!
Fikirden hoşlanmıyorum , çünkü bazen aralarına başka bir komut ekliyorsunuz ve artık hatırlamıyorsunuz.
sudo !!
, kabuk genişleyecektir, !!
böylece hangi komutu çalıştırmaya çalıştığını görebilirsiniz. Bu nedenle, Ctrl-C'ye basıp doğru komutu bulmak rahatsız edici olabilir, ama en azından sizi habersiz almayacak.
!!
sudo !!<TAB>
ve otomatik !!
olarak benim için tamamlandı. Bash M-^
(benim için alt + shift + 6) ile tarihi genişletebilir , ancak bu daha az akıcı (buna rağmen yeniden adlandırabilirsiniz). Ayrıca, shopt -s histverify
tarih genişlemesi kullandığınızda ve enter tuşuna basarsanız, bunun yerine onu görmenizi / düzenlemenizi sağlamak için gerçekleştirilen genişlemeyle birlikte başka bir bilgi istemi satırı verir.
shopt -s histverify
tek bir bit yardımcı olmaz. Çoğu insan Enter
iki kere vurmaya alışır. Bu noktada, ne olduğunu kontrol etmek için hala çok geç kaldılar.
Ben sadece bir alternatif ekleyeceğim: yazarken kısasudo !!
ve daha esnek:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
Bu aynı tuşa basma sayısıyla aynıdır ("ctrl + A" yı bir tanesini sayıyorum ...), ancak "yukarı ok" ekleyerek geçmişinizde hangi komutu koyarsanız yapabilirsiniz.
set -o vi
). Sonra Escape (komut moduna gidin) ve sonra 'I' (büyük harf 'i', satırın başına ekleyin).
Bunu yapmanın birkaç yolu var
Sadece komuttan sudo
önce tekrar ekleyerek komutu girin
Up arrowSon komutu almak ve sudo
önüne koymak için tuşuna basın .
Giriş sudo !!
!!
Geçen etmek genişlediğinde komutu girdi. Burada görmek komut satırı geçmişi ile diğer şeyler ile benzer şeyler yapabilirsiniz
Bu soru, " Aynı komutu çalıştır, ancak bazı modifikasyonlarla çalıştır " olarak genelleştirilebilirdi , çünkü Unix'teki mükemmel tasarım kararlarından biri, kabuğa bir kez uygulananların, kabuğundan herhangi bir komut tarafından çalıştırılanlardan yararlanabileceğidir.
Başka bir deyişle, bu numara sadece aşağıdakilere uygulanmaz sudo
:
sudo !!
) olarak tekrarlayıntime !!
)env A=b B=z !!
)!!
)Tarihçe genişletme (geçmiş değiştirme olarak da bilinir), önceki komutları tekrar etmeyi kolaylaştıran (daha az tuş vuruşuyla) yalnızca bir kabuk özelliğidir. Kabuk adam sayfanızı kontrol edin history expansion
. Örneğin tarihle yapabileceğiniz daha birçok püf noktası ve kısayol tarif eder:
Önceki komutlara numaradan bakabilirsiniz:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
Tek tek kelimelere önceki komutlarda başvurabilirsiniz:
some-command !$ # run some-command on the last arg of previous command
Tekrarlamadan önce de arama yapabilirsiniz:
!?awk # repeat the last command including the string 'awk'
Geçmişi arayabilir ve bir şeyi başka bir şeyle değiştirebilirsiniz:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
Ve çok daha fazlası, çünkü komut seçimi, arg seçimi, bağımsız arama ve değiştirme işlemlerini birleştirebilirsiniz.
Kabuğunuzun man sayfası (bu durumda man bash
) arkadaşınızdır.
Bash yerine zsh kullanıyorum ve bunu benim içimde bulunduruyorum ~/.zshrc
, bu yüzden komut satırının başında Alt+ Seklerine basarak sudo
:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
Ne yazık ki, bash de aynı şeyi yapmanın bir yolunu bulamadım.
~/.inputrc
"\es":"\C-asudo "
ve uzun bir çizginin başlangıcına hareket edeceksiniz ve sudo çizginin başına basıldığında sudo eklenecektir alt-s
. Terminali yeniden başlatın veya ~/.inputrc
çalışması için tekrar okuyun .
Bunu bir takma adla yapmak istiyorsanız, bir alias redo='sudo $(history -p !!)'
nedenden dolayı kullanmanız gerekir .
Tercih ettiğim yol:
Ama sadece "sudo !!" yapmak daha kolay olabilir, bu size kalmış.