Nasıl bash komut satırı etrafında verimli bir şekilde hareket edebilirim?


19

Bu yüzden upbenim kabuğumda (çoğunlukla OSX veya Ubuntu'da Bash) kullanıyorum, ancak bazı zamanlar imlecin geçerli konumundan sonra bir şeyler istediğimi biliyorum . Yukarıdaki çizgiyle tamamladığım çizgiyi almanın bir yolu var mı? Vurmak upve sonra leftcan sıkıcı.

Diğer hileler de harika olurdu, hariç tab, hepimiz hakkında :)

İşte bir örnek (~ quack'in isteği başına):

Ben yazın mkdir /where/the/hell/is/that/thingve sonra aynı dizine cd istiyorum. Ama şimdi meta-b'yi biliyorum :)


1
açık bir örnek harika olurdu.
quack quixote

@ ~ quack şimdi örnek yapıyor
Dan Rosenstark

1
İşte oldukça güzel bir cevapla ilgili (çoğaltılan) bir soru: superuser.com/questions/124336/…
cregox

Yanıtlar:


11

Bunu dene:

mkdir /where/the/hell/is/that/thing

sonra alt+.

OS ve terminal bağlı yazdığınız gerekebilir escardından.

Önceden belirli bir argüman seçmek için alt+ 1+ tuşlarına da basabilirsiniz ..

Bu çok daha iyi !! veya! $ çünkü aslında çalıştırmak üzere olduğunuz şeyi görebiliyorsunuz ve yine de daha az tuşa basmanız gerekiyor.

edit: kesinlikle konuşma metadeğil alt, bu yüzden aynı zamanda klavyenin kurulumuna bağlı olarak "windows" tuşu ile çalışabilir ..


ilginç! bunu bilmiyordum.
quack quixote

2
@justin bu harika. OSX'te meta kaçıyor.
Dan Rosenstark

@yar, OS X Terminal ile 'Ayarlar' -> 'Klavye' altında 'seçeneği meta anahtar olarak kullanmak' için bir tercih ayarı vardır.
ThomasW

Teşekkürler @ThomasW Bu şeylere geri dönmeliyim. Her gün komut satırındayım, ancak çok az hile kullanın.
Dan Rosenstark

28

Bu, bash'ın etkileşimli giriş mekanizması olduğundan, sisteminizdeki man bash'ı , özellikle Readline'daki bölümü okumalısınız . Gnu.org de Bash manuel güzel bir bölüm vardır Commandline Düzenleme boşlukların bazı irade yardım dolgu söyledi.

Varsayılan olarak, komut satırında dolaşmak için bunları kullanabilirsiniz (sadece birkaçını listelemek; tam liste için bağlantıya bakın):

  • Ctrl+ asatırın başına gider (veya Hometerminal ayarlarına bağlı olarak)
  • Ctrl+ esatırın sonuna gider (veya End...)
  • Meta+ fbir "kelime" ilerler
  • Meta+ bbir "kelime" geri gider

Bunları bir satırdaki metni "öldürmek" (diğer adıyla "kes") için kullanabilirsiniz :

  • Ctrl+ kmevcut imleç konumundan satırın sonuna kadar metni öldürür ("keser")
  • Ctrl+ yen son öldürülen metni imlecin arabelleğine geri çeker ("yapıştırır")

Böylece, tekrarlamak istediğiniz bazı komut satırlarının bir yığınını seçmek, bunları öldürmek ve ardından bir sonraki komutunuzun sonuna yapıştırmak için bunları birleştirebilirsiniz.


Şimdi, daha da eğlenceli hale getirmek için, bash'ın Tarih Açılımını ele alalım . Bu olmasıdır !!olduğunu Studer cevabı bahseder . Tarih genişlemesi, olay göstergelerine , kelime belirleyicilerine ve değiştiricilere ayrılır .

Etkinlik belirleyicileri şöyle görünür (yine tüm listenin bağlantılarına bakın):

  • ! - tarih değişikliğine başlar
  • !n- bash geçmiş listesindeki n-th komutu, bazı n tamsayıları için (negatifler için de çalışır)
  • !!- önceki komut; eşittir!-1
  • !string- string ile başlayan en son komut

Kelime belirleyicileri bir olaydan belirli bölümleri seçer. :Olayı sözcük işaretleyiciden ayırmak için kullanın . Sözcükler, satırın başlangıcından başlayarak 0'dan numaralandırılır ve tek satırla ayrılmış olarak geçerli satıra eklenir.

  • $- son argümanı belirtir (örn !!:$. son komutun son argümanıdır ; kısaltılabilir !$)
  • n- atar n'inci kelime (örneğin !str:2ile başlayan en son komutu 2 arg olduğu str ; !!:0edilmektedir komutu son komutun)

Bu nedenle, örneğinizi takip etmek için, son komutunuz buysa mkdir /some/really/long/path, çalıştırmak sadece !!o komutu yeniden çalıştırır. Ama cdbunun yerine bu yola girmek istiyorsunuz :

$ cd !$

Şimdi başka komutlar gerçekleştirdiğinizi ve sonra bu yola tekrar başvurmak istediğinizi varsayalım. Çalıştırdığınız son mkdir komutu buysa, bu yolu tekrarlamak için kullanabilirsiniz:

$ tar czf ~/foo.tgz !mkdir:$

bunları (ve diğer Readline komutlarını) istediğiniz tuş kombinasyonlarına da bağlayabilirsiniz ; kılavuzun Bindable Readline Komutları'nın 8.4 bölümüne bakınız: gnu.org/software/bash/manual/… ve bölüm 8.3, Readline Init Dosyası: gnu.org/software/bash/manual/bashref.html#Readline-Init-File
quack quixote

teşekkürler gerçekten yardımcı olur. Her ne kadar "kılavuzu okuyun" bir tür beklenen olsa da, bağlamalar etrafında temel hareket etmenin belirtilmesi yardımcı olur. Sadece ctrl-a'yı bilmek bile gerçek tasarruflar olabilir.
Dan Rosenstark

@quack, sorun değil, aslında daha sonra bir düzeltme yakaladım :)
Dan Rosenstark

1
ayrıca geçerli tuş bağlarınızı not eder bind -pveya bind -Pyazdırır; bu, bashınızın kullandığı şey için nihai referanstır .
quack quixote

1
Bu cevabın büyüdüğünü düşünüyorum: Tarihin Genişlemesi ile ilgili şeyler harika.
Dan Rosenstark

6

Bir vi kullanıcısıysanız, kabuğu yazarak vi moduna geçirebilirsiniz set -o vi.

Daha sonra yazdıktan sonra komut satırında her türlü güçlü şeyi yapabilirsiniz Esc + k.

Ben en çok kullandığınız biridir Esc+Kardından /eğik çizgi komut satırı tarih boyunca arama yapmak için kullanılacak sonra yazdığınız herhangi bir metin.

Örneğin Esc + k /smbclient , yazdığınız son smbclient komutunu verir. Standart vi tuşlarını kullanarak tüm aramalarda gezinebilirsiniz ( jve kyukarı ve aşağı için ama yukarı ve aşağı okların da çalışacağını düşünüyorum).

Burada daha fazla yardım , bu bağlantıda aradığınız şeyden daha fazla olabilecek bazı dahili bash şeyleri de var.

Şerefe, Stu.


vi modu benim için işe yaramazken, vi'ye henüz adım atmadığım için l mürekkep harika. Bunun için teşekkürler!
Dan Rosenstark

1
Vi modu olmayan eşdeğer ctrl-r'dir. Yazıp önceki komutun bir parçasını yazın. Yazılan şeyin son oluşumunu ortaya çıkaracaktır. Bir sonrakine geçmek için ctrl-r tuşlarına tekrar basın. Çok kullanışlı.
Nerdfest

3

!!Son komutu temsil eden kullanabilirsiniz :

% Ölçek
% Eko !!
> test

ilginç. Sonra o dizeyi ... ne kullanarak değiştirmek istiyorum emin değilim?
Dan Rosenstark

bu bash'ın tarih tesislerinin bir parçasıdır: gnu.org/software/bash/manual/… .. özellikle tarih genişlemesi: gnu.org/software/bash/manual/bashref.html#History-Interaction ... not !!eş anlamlıdır için !-1: gnu.org/software/bash/manual/bashref.html#Event-Designators
quack quixote

2
Bu sudo kullanmayı unuttuğunuzda gerçekten yararlıdır: ie sudo !! - $ more / etc / sudoers / etc / sudoers: İzin reddedildi $ sudo !! sudo more / etc / sudoers [sudo] için şifre ..: # / etc / sudoers ... ... ...
user9632

@wookiebreath, bunun için teşekkürler, şimdi bu cevabı
oylayacağım

0

Verdiğiniz örnekte, önceki komutun son parametresini temsil etmek için! $ Kullanın:

mkdir / bir şey / bir şey

cd! $

Önceki komutların belirli parametrelerini çıkarmak için numaralı varyasyonları da kullanabilirsiniz.


0

Son zamanlarda bu readline hile sayfasını çok yararlı buldum . Bilmediğim bir çok şey. Ben kullanmak için kullanılan !$ben öğrendim kadar hep Alt+ .şimdi sürekli kullandığım. :)

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.