Önceki bash komutunun argümanını nasıl hatırlayabilirim?


Yanıtlar:


562

Önceki komutun son argümanını geri çağırmak için $_veya !$tuşlarını kullanabilirsiniz .

Ayrıca Alt + .önceki komutları herhangi birinin son argüman hatırlamak için kullanılabilir.


121
Eğer keyfi bir argüman istiyorsanız Ayrıca, kullanabilirsiniz !!:1, !!:2vb ( !!:0Bkz önceki komut kendisi olduğunu.) Gnu.org/software/bash/manual/bashref.html#History-Interaction
janmoesen

41
Benzer şekilde !$, !^ilk argüman için kullanın .
Will

13
ahh ... * nix ... sen güzellik bir şeysin ... her gün seni daha çok seviyorum
jx12345

Önceki komutun sondan sonuncuya kadar olan argümanından nasıl bahsedebiliriz? örneğin, verdiysem echo tiger rabbit, tigeraşağıdaki komuta nasıl başvurabilirim ?
Chan Kim

3
Alt + .vi modunda çalışmaz. Burada kafayı karıştıranlar için sadece FYI.
Brian McCutchon

160

Önceki komutun iki bağımsız değişkeni varsa, bunun gibi

ls a.txt b.txt

ve ilkini istedin, yazabilirsin

!:1

vererek

a.txt

Veya her ikisini de istiyorsanız,

!:1-2

vererek

a.txt b.txt

Bunu istediğiniz sayıda bağımsız değişkene genişletebilirsiniz, örneğin:

!:10-12

@RNA, sadece bir yazım hatası eklemediğimden emin olmak için tekrar denedim, biraz daha fazla ayrıntı verebilir misiniz (örn. Ubuntu komut satırı, windows için cygwin? Hata mesajı? Önceki satır?)
Robert Gowland

GNU bash, sürüm 3.2.51 (1) -release (x86_64-apple-darwin13) kullanıyorum Telif hakkı (C) 2007 Free Software Foundation, Inc. Hata mesajı-bash: :1-2: bad word specifier
RNA

2
Önceki satırda iki argüman olmasaydı aynı şeyi alıyorum. Örneğin. line 1 ls a.txtline 2ll !:1-2
Robert Gowland

haklısın. Bu yaptığım aptalca bir hatadır. Teşekkürler!
RNA

Ayrıca tüm argümanları almak !:^-$için kullanılabilir veya elbette sayılarla birlikte benzer kod.
816-8055

88

!!:nnistediğiniz bağımsız değişkenin 0 tabanlı konumu nerede .

Örneğin:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"

Ön !ek, önceki komutlara erişmek için kullanılır.

Diğer faydalı komutlar:

  • !$ - önceki komuttan son argüman
  • !^ - önceki komuttan ilk argüman (program / yerleşik / koddan sonra)
  • !! - önceki komut (genellikle "bang bang" olarak telaffuz edilir)
  • !n- Komut numarası ndanhistory
  • !pattern - en son komut eşleştirmesi pattern
  • !!:s/find/replace- son komut, yerine findkoymakreplace

Komut geçmişi hakkında daha fazla bilgi


7
Bunun yerine !!:s/find/replace, bunu da yapabilirsiniz ^find^replace.
Büyük McLargeHuge

Ayrıca: !* - önceki komuttaki tüm argümanlar (program / yerleşik / komut dosyasından sonra). örneğin: ls *.tmp *.cache rm !*
Aphoid

68

Komut satırında esc- .veya alt+.

Bu yoluyla döngüleri son argüman önceki komutların.


Her zaman ve çalışmak için anahtarları buldum .
Bucket

@Bucket tuşları önceki komutlardan geçerken, Antonio tarafından sağlanan çözüm önceki argümanlardan geçmesine izin verir (yalnızca önceki her komutun son argümanı)
everyonesdesign

30

Belirli bir komut için geçmişte verilen sayıyı biliyorsanız, aşağıdaki komutları kullanarak hemen hemen bu komutta herhangi bir argüman alabilirsiniz.

Geçmişteki üçüncü komuttan ikinci argümanı almak için aşağıdakini kullanın,

!3:2

Tarihteki son beşinci komuttan üçüncü argümanı almak için aşağıdakini kullanın,

!-5:3

Eksi işareti kullanarak, tarihin son komutundan geçmesini istersiniz.


19

! * önceki tüm bağımsız değişkenlerle yeni bir komut çalıştırır.

ls /tmp
cd !*
#you are now in /tmp

Bu benim için OSX üzerinde işe yaramadı - $_bunun yerine kullanmak zorunda kaldı .
Mike W

16

Evet, !$önceki komutun son argümanını çağırmak için kullanabilirsiniz .


Özellikle komutunuz birden fazla argüman içeriyorsa, "son" anahtar kelimesinin farkında olun.
Bucket
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.