Yukarı düğmesine basmak sıkıcı ve aradığım komutu kaçırabilirim. Bu yüzden history
terminalde yazarken daha önce girmiş olduğum tüm komutları verir, bir sayıya endekslenir. Sadece komutla ilişkili numarayı arayabilmemin bir yolu var mı?
Yukarı düğmesine basmak sıkıcı ve aradığım komutu kaçırabilirim. Bu yüzden history
terminalde yazarken daha önce girmiş olduğum tüm komutları verir, bir sayıya endekslenir. Sadece komutla ilişkili numarayı arayabilmemin bir yolu var mı?
Yanıtlar:
Bash tarihi birçok yararlı şey yapabilir ve Strg-r
Terry Wang'ın bahsettiği arama, aralarında önemli. Ancak tam olarak istediğinizi yapmak da mümkündür.
Önceki komutu ile tekrar yapabilirsiniz !!
. Bununla, önceki komutu da düzenleyebilirsiniz. Örneğin, bir komut için kök ayrıcalıkları almayı unuttuysanız
apt-get install a-long-list-of-packages
hepsini tekrar yazmanıza gerek yok. Bunun yerine sadece arayın
sudo !!
Komutu geçmişinizden belirli bir konumda yeniden çalıştırmak isterseniz, !
örneğin,
!3
3. konumda komutu yeniden çalıştırmak için. Bunun üstten sayıldığını unutmayın. Yani geçmişinizde 500 komut saklıyorsanız, !1
"500 komut önce" olurdu. Negatif sayılar da kullanabilirsiniz. Örneğin
!-2
ikinci son komutu yeniden yürütür.
Gibi bir dize ile başlayan son komutu da yeniden yürütebilirsiniz
!apt-
"apt-" ile başlayan son satırı yeniden yapar. Dizenin herhangi bir yerde göründüğü son komutu istiyorsanız, şöyle bir şey kullanabilirsiniz:
!?pt-ge
Bash tarihinin yapabileceği daha ilginç şeyler var. Sadece çok çeşitli olasılıklar hakkında bir izlenim vermek için, özellikle tarihin bir komutunun parametresine erişebilirsiniz. Yani
!-5:3:p
üçüncü parametreyi son komuttan beşinciye yazdıracaktır.
EDIT: Rudie'nin aşağıdaki yorumuna ilişkin olarak, standart ayarlarla bu bash geçmişi genişletmeleri gerçekten doğrudan yürütülür. Muhtemelen en iyi böyle açıklanandan: Böyle bir çağrı !-3
olup yerini üçüncü son geçmişinizden komuta ve birlikte kabuk tarafından daha sonra idam (değiştirme ile) giriş. Yani, yazarsanız !-3
ve basarsanız ENTER
ve üçüncü son komutunuz ls ~
buysa, ls ~
yine tekrar yazıp ENTER
"kendi başınıza" basmış olmanızla aynıdır .
Bunu istemiyorsanız, kabuk seçeneğini ayarlayabilirsiniz histverify
. Kabuk seçeneklerini ayarlamak ve ayarlamak için, shopt
komutta okumak isteyebilirsiniz . İle histverify
set gibi bir çağrı !-3
yalnızca komut satırına geçmişinizden değiştirme yazıyor, ama doğrudan yürütmüyor. Yani, konuşmak için, can alıcıya ENTER
kendiniz basın - ya da isterseniz kaçının.
!
ben ne olduğunu bilmek isterdim ... bayağı tehlikeli !-4
çalıştırmadan önce tam olarak yaptı. Yoksa önce mi gösteriyor? Güzel özet!
!-238
. İkinci son, üçüncü son, belki de son komutla hatırlamak çok zor olmamalıdır;) Linux'ta olduğu gibi (ve aslında genel olarak bilgi işlemle), ne yaptığınızı bilmeniz beklenir. Ve gerçekten ek güvenlik ağı istiyorsanız, bir shopt
uzakta;)
Evet var. Örneğin, yanında 1234 numaralı bir komut yürütmek istiyorsanız, aşağıdakileri yapın:
!1234
Diğer faydalı şeyler:
En son çalıştırdığınız komutu çalıştırmak istiyorsanız, şunları yapın:
!!
En son çalıştırdığınız ls
komutu çalıştırmak istiyorsanız, şunları yapın:
!ls
Az önce koştuysanız ls /some/long/path
ve cd
yapmak istiyorsanız, şunları yapın :
cd !$
Daha fazla bilgi için:
Tuş bileşimini kullan Ctrl
- r
, bash geçmişinde arama yapmak için anahtar kelime kullanabilirsiniz.
Hızlı bash anahtar bağlama başvurusu: http://ss64.com/bash/syntax-keyboard.html
Bir komutun geçmiş numarasını bulduysanız ve tekrar çalıştırmak istiyorsanız, !
ardından sayıyı yazın, örn. !1234
Ve tuşuna basın Enter. Bu tarih genişlemesinin bir parçasıdır ; Eğer çakmak olabilir düzenleyiciler bunun üzerine.
Komutu çalıştırmadan önce düzenlemek istiyorsanız, fc 1234
harici bir düzenleyici çağırır.
Ancak Terry Wang'ın daha önce de belirttiği gibi, geçmişte bir komutu bulmanın genellikle artımlı aramayı başlatmak ( Ctrl+ yürütmek istediğiniz komutu bulduğunuzda Rbasın Enter) veya fc PREFIX
önceki komutu yürütmek için + dahil olmak üzere geçmiş numarasını belirlemekten daha hızlı yollar vardır. ile başlayan komut PREFIX
.