it-swarm-tr.com

Bash'daki ünlem işaretini (!) Anlama

Kullandım

history | less

önceki komutların satırlarını almak için ve sol taraftaki rakamlardan tekrarlamak istediğim satırı buldum (örn. 22) ve yaptım

!22

komut isteminde çalıştı ve işe yaradı - o sırada yaptığım satırdaki komut kümesini yürütmek. Ünlem işaretinin nerede kullanıldığını, bash tarafından gerçekleştirilen eylemler açısından neyi temsil ettiğini ve nerede kullanılacağını anlayamıyorum. Belgelerden 'somut' bir açıklama görmüyorum.

112
Vass

!, başlangıçta C Shell öğesinde görünen ve ok tuşlarına sahip terminallere güvenebilmeden önceki günlerde ortaya çıkan bir özelliktir. Mevcut komut numarasını Bilgi İstemine eklerseniz özellikle kullanışlıdır (PS1="\!$ ") böylece geçmiş komutların numaralarını almak için ekranınıza hızlıca bakabilirsiniz.

Artık ok tuşlarını ve benzeri şeyleri Ctrl-R komut geçmişini aramak için, bu özellik için fazla bir şey görmüyorum.

Hala yararlı bulabileceğiniz bir çeşidi !!, önceki komutu yeniden yürütür. Kendi başına bulamıyorum !!Enter sadece daha hızlı Enter, ancak daha büyük bir komutla birleştirildiğinde yardımcı olabilir.

Örnek: Yaygın bir pilot hatası açık Sudo tabanlı sistemler unutmaktır ekstra ayrıcalıklar gerektiren bir komutta Sudo öneki. Bir acemi tüm komutu yeniden yazıyor. Çalışkan öğrenci, komutu Shell'in komut geçmişinden düzenler. Aydınlanan tip Sudo !!.

Bash, ! Shell ile set +o histexpand veya set +H. set -K.

157
Warren Young

Burada daha uzun bir cevap yoksa, son zamanlarda bir tane okuduğum için kesinlikle Süper Kullanıcı'da bir tane var. bash man page konuyla ilgili TARİH GENİŞLEME başlıklı büyük bir bölüm bulabilirsiniz.

Tüm Host'u son komutu veya X numaralı komutu çalıştırmaktan daha fazlasını yapabilirsiniz. !catcat ile başlayan son komutu çalıştırmak için. Veya !?bash?:s/bash/csh/bash içeren son komutu çalıştırır, ancak csh ile değiştirir.

52
Cry Havok

! İle çok daha fazlası yapılabilir:

  • 3 komuttan önce yazılan bir komutu yürütün: !-3
  • !ls ile başlayan bir komut yürütme

ve çok daha fazlası. Bakınız Bilmeniz Gereken 15 Linux Bash Geçmişi Genişletme Örneği

40
user379997

Tabii ki !! Kabuk'taki son komutu yeniden kullanmak için. Ve sonra !$ son komutunuzun son kısmını yeniden kullanmak için.

örneğin. bazı dosyaları görüntüle

less path/to/your/file.txt

Şimdi aynı dosyayı düzenlemek istiyorsanız, !$ Son komuttan yalnızca dosya yolunu almak için

vim !$

DÜZENLE:

Önceki komutun tüm argümanlarını !*

örneğin: Bu, bazı dosyalar oluşturur ve tümünü kaldırır

$ touch a.txt b.txt c.txt d.txt
$ rm !*

Yine, önceki komutun belirli bir argümanını kullanabilirsiniz

örneğin. Bu 4 dosya oluşturur ve 3. dosyayı (c.txt) kaldırır

$ touch a.txt b.txt c.txt d.txt
$ rm !:3

Benzer şekilde, son komuttan bir dizi argümanı aşağıdaki gibi kullanabilirsiniz

$ touch a.txt b.txt c.txt d.txt
$ rm !:2-4

Bu, ifadeyi rm b.txt c.txt d.txt

6
Teshan Shanuka J

Bir arkadaşım bana bunu e-postayla gönderdi:

GNU geçmiş kütüphanesinin bir parçasıdır. Bash'da geçmişinizdeki komutları yeniden çalıştırmak için kullanılır. Hardcore olmak istiyorsanız, bash-4.1/lib/readline/histexpand'de history_expansion_char için grep Uygulama ayrıntıları için .c.

4
Vass