it-swarm-tr.com

Shell'in geçmişinde arama yapmanın en iyi yolu

Geçmiş dosyamı bir komut aramak için grep'ten daha iyi bir yol var mı? Komutun neye başladığı hakkında bir fikrim var, ama tarihin ne kadar geriye gittiğini bilmiyorum.

pdate: eskiden zsh'a özgüdür, ancak çakışan cevaplar burada herhangi bir Kabuk (veya mod (vi/emacs)) için cevap vermekten çekinmeyin, spesifik olup olmadığını not edin.

82
xenoterracide

Ctrl+R tanımlayıcısının söylediği gibi genellikle en iyi yoldur. string ile başlayan en son komutu çalıştıran !string Veya string içeren en son komutu çalıştıran !?string? Kullanabilirsiniz.

(Bu soru ile ilgili tek şey olduğunu düşünüyorum, ancak bu cevaptaki tarih komutlarının çok daha fazlasını ele aldım)

78
Michael Mrozek

Bash kullanırken şunu yazın Control-R ve sonra yazmaya başlayın. Yazıyor Control-R Bazı metinleri girdikten sonra tekrar tekrar sizi eşleşen komut satırlarına götürecektir.

32
grendel

Bunun yardımcı olup olmayacağından emin değilim, ama kullanmayı seviyorum ctrl-r ve sonra komutu yazmaya başlayın. Geçmişinizden geçmeli ve size ilk maçı sunmalıdır. Maçlar arasında geçiş yapmak için ctrl-r tekrar.

18
decriptor

Aşağıdakileri ~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

ve Bash'ı yeniden başlatın, yazmaya başlayabilir ve ardından Page Up ve Page Down yazdığınız aynı önekle başlayarak satırların geçmişi boyunca ileri ve geri gitmek için.

(Bazıları \e[A ve \e[B, normalin yerini alacak Up ve Down yeni anahtarlar bağlamak yerine eylemler.)

17
ephemient

Etkileşimli Bilgi İstemi Ctrl-R, daha önce bahsedilen, en uygun yoldur. Ayrıca yeniden eşlemek popüler Up ve Down komut satırında bir önek için geçmişte arama yapmak için ok tuşlarını kullanın, ancak bunun için ~/.inputrc dosya .

Klasik ve daha az etkileşimli çözüm, Shell geçmiş genişlemesini kullanmaktır. Yazıyor

!foo

foo ile başlayan son komutu yürütecek ve

!?foo

foo içeren son komutu yürütür. Geçmiş genişletme hakkında daha fazla bilgi, Kabuğunuzun Bash veya uyumlu olduğunu varsayarak Bash referans kılavuzunda bulunabilir.

9
Adam Byrtek

stty -ixon Dosyanıza ~/.bashrc Eklerseniz Ctrl-s ters yönde gidecek Ctrl-r.

!ls Yazarsanız bash geçmişinize bakar ve "ls" ile başlayan en son komutu yürütür

3
Kevin M

zsh'a özgü olabilir. Araştırmada bu cevap I bulundvi-history-search-backward ile arama yapmaya izin verir / vi modunda (ki içinde olduğumu söylemedim) sonra kullanabilirsiniz n ve N sırasıyla ileri ve geri aramak için (tuşuna bastıktan sonra) enter).

2
xenoterracide

Bundan bahsedilmediğine şaşırdım - ancak bunu yaparak bash veya ksh'da vi modunu seçebilirsiniz:

set -o vi

... veya bunu ~/.inputrc (GNU readline):

set editing-mode vi

Sonra bundan sonra kullanabilirsiniz Esc komut mod girmek ve kullanmak k tarihe geri dönmek ve j ileri gitmek. Ayrıca şunu kullanarak da arama yapabilirsiniz: / normal arama yapmak ve ? tersini aramak.

Eğer kullanırsan ~/.inputrc, bu yalnızca GNU bash'da değil, aynı zamanda GNU readline ve MySQL komutu Shell ve benzeri programlar gibi) CPAN Kabuğu.

2
Mei

Geri aramayı kullanırken ilerlemek için (Ctrl-R komutuyla):

  1. .Bashrc dosyanızı açın:
    Sudo gedit ~/.bashrc

  2. bu satırı ekleyin ("f" harfi, henüz sistem tarafından kullanılmayan başka bir harfle değiştirilebilir)

    bind '"\C-f": forward-search-history' 
    
  3. Dosyanızı kapatın ve .bashrc dosyanızı (veya başka bir terminali açın) şu komutla güncelleyin:
    source ~/.bashrc veya . ~/.bashrc

ŞİMDİ KISAYOLLA TARİHİNDE İLERLEYİN: Ctrl + f

Ubuntu 18.04 LTS üzerinde çalışma

2

Ben çoğu zaman aşağıdaki iki kullanın.
Ama lütfen ikisinin de başlangıç ​​karakterleri aradığını unutmayın.

  1. tcsh: komutun birkaç karakterini yazın ve Esc+p o tuş dizisi ile başlayarak önceki komutu gösterecek ve tekrar basacak başka bir komut gösterecektir.
  2. ksh: fc -e - <SPACE><first few char for your previous > kullanın, bu sırayla eşleşen son komutu çalıştırır.

Gibi bir şey bulamadım Ctrl+R benim ksh ve tcsh için Bash.

1
Hemant

Kullanmanın bir yolu var Ctrl-R tcsh ile. Aşağıdakileri ~/.cshrc:

bindkey "^r" i-search-back (sadece bir işaret işareti ve r harfi)

Bu benim için en büyük zaman tasarrufu.

1
Alain

@ephemient için benzer cevap, ancak .bashrc içine koyabilirsiniz

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-foward'

ve ifadenin bir kısmını yazın ve ardından en son eşleşen seçeneklere göz atmak için yukarı/aşağı oku kullanın. Bu matlab'ın varsayılan davranışıdır.

Çoğu kişi için, ayarlarınızı yeni bir sisteme taşımak istiyorsanız, yalnızca ~/.bashrc o zaman bunu takmanız gerektiğini ~/.inputrc

1
Matt S.

Evet, en azından zsh kullanıyorsanız var. Komutu yazmaya başlayın ve ardından M-p (ESCp) ve yazdıklarınızla eşleşen önceki komutları bulur. Bir sonraki maçı bulmak için tekrar basın.

0
dkagedal