BASH ile önceki komuta kadar "kaydırma" yaptıktan sonra… bu tarihte bir sonrakine nasıl geçilir?


59

Özür dilerim, bu unvan şimdiye kadar tasarladığım en şık değil.

Ama bir çok insanın bunu merak edeceğini sanıyorum ve sorum benim bir şans olabilir ... söyleyebileceğim tek şey bulamadım.

"Yukarı kaydırma" derken klavyede "yukarı ok" tuşunu kullanıyorum, bu da sizi en son komuttan başlayarak geçmişe doğru kaydırıyor.

Yani belki 30 komut geri komut alırsın ... ve onu çalıştırırsın. Ve sonra aslen gelen komutu çalıştırmak istersiniz ... bunu yapmanın çabuk bir yolu var mı? Veya BASH’da akıcı olanlar bunu nasıl yapıyor?

Yanıtlar:


96

Komutu yerine Ctrl+ ile çalıştırmak geçmişden bir komut çalıştırır ve ardından bash geçmişinin önüne dönmek yerine bir sonraki kuyruğu sıraya koyar.oEnter


2
NetBSD'deki bir xterm'de çalışan kendi bash'ımda bunu denedim ve işe yaramadı! Bunu etkileyebilecek ayarlar var mı? Hiçbir .inputrc dosyam yok. Readline (3) için kılavuz sayfasında Co belirtilmemiştir.
Rhialto,

@Rhialto Eğer kullanıyorsunuz vihattı (etkinleştirilen düzenleme set -o vi) ya da emacs? Çünkü Ctrl-Osöyleyebileceğim kadarıyla eskilerle çalışmaz.
B Katmanı

: ... ama bu komutla çözülebilir bind "\C-o":operate-and-get-next(veya sonrasında her şeyi eklemek bindiçin ~/.inputrc)
B Katman

1
Sorunumun ne olduğunu öğrendim: ^ O Çıktıyı Yıkama karakteri olarak alındı ​​(Linux'ta desteklenmiyor) ve aktif durumdayken readline bunu devre dışı bırakmıyor. Basit bir düzeltme eki sağladım ancak bash ve readline sorumlusu bunun Hata Değil olduğunu iddia ediyor. Katılmıyorum. Listeye
html/

19

Jon Reinhold'un cevabı harika, ama önereceğim çok daha güçlü bir çözüm var. Ayrıca Jon'un cevabında bir getcha hakkında bir yorumum var, ancak doğrudan yorum yapabilmek için yeterli saygınlığım yok, bu yüzden @Jon Reinhold, eğer bunu okursanız, lütfen yorumumu size iletin.

Bash fc, bash geçmiş listesinin parametre satır numaralarını alan bir komut içerir . Daha sonra varsayılan düzenleyicinizi bu satırlarla metin olarak açar. Bu noktada, isteğe bağlı olarak satırları düzenleyebilirsiniz. Ardından editörden çıktığınızda bash bu satırları çalıştırır!

Yapmak isteyebileceğiniz bir düzenleme örneği, "; read -p" next ... "gibi son satırın sonundaki herkese eklenir. Bu, bash'ın her satırı çalıştırmasına ve devam etmeden önce sizi yönlendirmesine neden olur.

Jon Reinhold için yorum: Harika cevap, ancak bunu nitelemelisiniz, çünkü eğer kullanıcı bash değişkenini HISTCONTROL içerecek şekilde ayarladıysa erasedups, o zaman C-okullanıcının gerçekleştirilmesinden sonra , görüntülenen tarihte beklenen bir sonraki komut yerine, bundan sonraki komutun kafası karışacaktır. görüntülenecek. Bunun nedeni bash, yürütülen komutun orjinal örneğini silmiş olmasıdır ve bundan sonra bütün komutlar bir satır yukarı, yani. geçmiş listesindeki bir daha düşük indeks numarasına.


teşekkürler, arama yaparak cevabını bulmaya çalışırken "fc" komutuyla karşılaştım. Bana göre bu, BASH neofitinin yavaş bebek adımındaki zafer adımında BİLGİ'ye doğru bir sonraki aşamasını temsil ediyor. İlk bebek adımını istedim .
Mike kemirgen

3
İşin ilginç Yani @mikerodent sayılı fchem eskidir Ctl-ove bashkendisini. (Bu cevabın aksine, aynı zamanda daha az yararlıdır.)
kubanczyk

1
İle ilgili sorun erasedupsaçıkça bir bash böceği ( bu durum için bir hüküm olabilirdi ). Yine de bilmek güzel.
alexis,

2
@kubanczyk Tartışılacak. Bu, neyin düzeltilmesi gerektiğine bağlı olarak karmaşık ve karmaşık bir komutsa, komutu güncellemek için tercih editörümü kullanmam çok daha hızlı olacaktır. Aynı zamanda daha kolay olurdu.
Pryftan

14

(Bunlardan istediğiniz davranışı gerçekleştirmek için başka bir yol bash taleb kısayolları tanımak için olurdu CTRL- oinanıyorum biridir) ve bash geçmişi arama.

Geçmiş araması

CTRL- rsizi aradığınız komutu yazmaya başlayabileceğiniz bash komut geçmişi aramaya götürür ve bash komutu sizin için otomatik olarak tamamlar. Otomatik tamamlama işlevi gerçekten çok iyi. Çalıştırmak istediğiniz komut giriş satırındayken, ENTERkomutu çalıştırabilir veya imleci komut satırının sonuna getirmek ve geçmiş arama modundan çıkmak için CTRL- tuşuna basabilirsiniz e.

CTRL- eBu noktada harika olan şey , tarih arabelleğinin içeriğe bağlı olarak bu komuta ayarlanmış olmasıdır. Şimdi önceki ve sonraki komutlar, tarihin sizin için bulduğu satırdan hemen önce ve sonra verilen komutlardır. Yukarı veya aşağı oklara basabilir ve bir sonraki komutu alabilirsiniz.

Tarihçe araması çok güçlüdür ve komuta geri dönebilmek için yukarı oku kullanmaktan kaçınmanın harika bir yoludur. Hızlı bir geçmiş araması , geçmiş boyunca elle arama yapmak için çok zaman kazandırabilir ve daha sonra devam edebilirsiniz CTRL- oJon'un yukarıda belirttiği gibi.

Readline Kısa Kesintiler

Eğer genel bash-fu'unuzu geliştirmek istiyorsanız, ok tuşları için kısa bir okuma satırı kısayolları vermenizi tavsiye ederim. Bunların daha uygun olduğunu ve yazma hızınızı artırmanıza izin verdiğini görebilirsiniz, ancak elbette YMMV. İşte birkaç tane daha:

  1. CTRL- bir nsonraki komut için (aşağı ok eşdeğeri)
  2. CTRL- pönceki komut için (yukarı ok eşdeğeri)
  3. CTRL- bbir karakter geri (sol ok eşdeğeri)
  4. CTRL- fbir karakter ileri (sağ ok eşdeğeri)

(Birlikte bu Taleb kısayolları CTRL- asatırın başına ve CTRL- esatırın sonuna) imo komut satırında adresinden hızını ve etkinliğini artıracaktır.


2
Bilmiyorum. Değiştirici tuşlarını ok tuşlarından daha yavaş ya da herhangi bir tuşa basarken daha yavaş buluyorum. EOL / etc gelince. Ev / bitirme tuşlarını kullanma eğilimindeyim (stty -a tabii ki oldukça kullanışlı şeyler de gösteriyor).
Pryftan

@Pryftan Fuarı yeterince, son cümle bir fikir olarak sunulmuştur (bkz. 'İmo'). Klavyenin ana satırında uzun süre boyunca kalmanın terminalde veya diğer yoğun yazma işlerinde çalışmak için iyi bir strateji olduğuna inanıyorum. Bazı kişiler ok tuşlarının diğer karakterlere daha yakın olduğu klavyelere sahiptir, bu durumda belki de okuma satırı kısayolları zorlayıcı bir kolaylık değildir. Bu son noktayı daha net bir fikir beyanı yapmak için cevabı düzenleyeceğim.
111 ---

1
@datUser Tbh ​​'Imo'yu özledim (ya da düşünmeyi ihmal etmediysem - tamamen mümkün). Yine de doğru olan şey, ters arama sizin için işe yararsa faydalı olması (+ 1'e sahip olması). Tabii ki, fc de (daha önce belirtildiği gibi) bir şey ve kullanıyor! (vb.). Unices'de bir kedinin cildini kaplamanın birçok yolu vardır. Oldukça doğru olan klavyelere gelince: Unicomp klavyem var (seviyorum ve hatıraları geri getiriyor) ama elbette Dvorak'tan bahsetmemeyi düşünecek başka klavyeler de var. Sonunda ne kadar çok seçenek varsa o kadar iyi olursun ve işin (veya oyunun) o kadar kolay olur :)
Pryftan
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.