Bash'de, önceki komutun son argümanından dizin yolunu nasıl alabilirim


0

Sık sık bunu yapmak zorundayım. Örneğin:

$ vim /etc/pam.d/sudo
$ vim /etc/pam.d/sudo-i
$ cd /etc/pam.d/  # Figure I should just go to the directory

Şimdi, bir dosya yolu olduğunda son argümanın dizinini elde etmenin bir yolu var mı? Umduğum şey şunun gibi bir şeydir:

$ vim /etc/pam.d/sudo
$ vim /etc/pam.d/sudo-i
$ cd $dir # <-- something that returns /etc/pam.d in this case

Bu soruyu soruyorum çünkü son zamanlarda $_faydalı olan değişkenlerin farkındaydım . İşe yarayabilecek başka bir komut satırı fu olup olmadığını merak ediyordum.


Unutmayın, önceki komut satırındaki son argümanı geri çağırmak için sekme tamamlama ve ESC noktanız olduğunu da unutmayın.
kayıkçı

Yanıtlar:



2

Bash geçmişi, daha önce yürütülen komutları listeleyen bir metin dosyasıdır - bu komutların ne yaptığını ve hangi tür parametrelerin iletildiğini söyleyen herhangi bir meta veri içermez.

Yani $ _ sadece son boşluktan sonra içeriği içeriyor.

Bence cevabım hayır, bunu bash ile yapmanın bir yolu yok, muhtemelen özel bir kabuğa ihtiyacınız olacak.


Muhtemel olabileceğini düşünüyordum. manSayfa boyunca baktım ve uygun görünen hiçbir şey görmedim. Sadece durumda isteyeceğimi düşündüm.
Belmin Fernandez

2

Deneyin

 $(dirname $_)

Bu size, son argüman ne olursa olsun yukarıdaki dizini verecektir. Bir .dizin bileşeni yoksa döndürür . Ayrıca argüman gibi bir şey /etc/pam.d/olsaydı, geri döner /etc.

Aşağıdakileri .profiledosyanıza eklemek, komut ile istediğiniz şeyi yapmanıza izin verecektir cdx:

alias cdx='cd $(dirname $_)' 

Bayanlar baylar, işte bu yüzden baca yığını kayalar. Karanlıkta bir atış oldu. Bahşiş için teşekkürler!
Belmin Fernandez
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.