it-swarm-id.com

Cara terbaik untuk mencari melalui sejarah Shell

Apakah ada cara yang lebih baik untuk mencari perintah histori file daripada grep? Saya memiliki beberapa gagasan tentang apa perintah dimulai, tetapi saya tidak tahu seberapa jauh ke belakang dalam sejarah itu.

pembaruan: sebelumnya adalah khusus zsh tetapi karena tumpang tindih jawaban jangan jawab untuk Shell (atau mode (vi/emacs)) apa pun di sini, catat jika spesifik.

82
xenoterracide

Ctrl+R biasanya merupakan cara terbaik, seperti kata deskriptor . Anda juga bisa menggunakan !string, yang menjalankan perintah terbaru yang dimulai dengan string, atau !?string?, yang menjalankan perintah terbaru yang berisi string.

(Saya pikir itu satu-satunya hal yang relevan dengan pertanyaan ini, tapi saya membahas lebih banyak perintah sejarah di jawaban ini )

78
Michael Mrozek

Saat menggunakan Bash, ketik Control-R dan kemudian mulai mengetik. Mengetik Control-R berulang kali setelah memasukkan beberapa teks akan memindahkan Anda kembali ke baris perintah yang cocok.

32
grendel

Tidak yakin apakah ini akan membantu, tapi saya suka menggunakannya ctrl-r dan kemudian mulai mengetik perintah. Itu harus melalui sejarah Anda dan memberi Anda pertandingan pertama. Untuk beralih melalui pertandingan, tekan saja ctrl-r lagi.

18
decriptor

Jika Anda menambahkan yang berikut ke ~/.inputrc

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

dan mulai ulang Bash, Anda bisa mulai mengetik, lalu gunakan Page Up dan Page Down untuk bergerak mundur dan maju melalui sejarah garis dimulai dengan awalan yang sama yang baru saja Anda ketik.

(Beberapa mungkin lebih suka menggunakan \e[A dan \e[B, yang akan menggantikan yang normal Up dan Down tindakan alih-alih mengikat kunci baru.)

17
ephemient

Prompt interaktif dijalankan oleh Ctrl-R, yang telah disebutkan sebelumnya, adalah cara yang paling nyaman. Selain itu populer untuk memetakan kembali Up dan Down tombol panah untuk mencari riwayat awalan yang saat ini ada di baris perintah, namun ini memerlukan beberapa perubahan pada ~/.inputrc file .

Solusi klasik dan kurang interaktif adalah dengan menggunakan ekspansi sejarah Shell. Mengetik

!foo

akan menjalankan perintah terakhir yang dimulai dengan foo dan

!?foo

akan menjalankan perintah terakhir yang berisi foo. Informasi lebih lanjut tentang ekspansi riwayat dapat ditemukan di manual referensi Bash , dengan asumsi Shell Anda Bash atau kompatibel.

9
Adam Byrtek

Jika Anda menambahkan stty -ixon Ke file ~/.bashrc Anda Ctrl-s akan pergi ke arah yang berlawanan dengan Ctrl-r.

Jika Anda mengetik !ls maka bash akan memeriksa sejarah Anda dan menjalankan perintah terbaru yang dimulai dengan "ls"

3
Kevin M

mungkin spesifik zsh. Dalam meneliti jawaban ini I ditemukanvi-history-search-backward yang memungkinkan seseorang untuk mencari / dalam mode vi (yang tidak saya sebutkan) Anda dapat menggunakannya n dan N untuk mencari maju dan mundur masing-masing (setelah menekan enter).

2
xenoterracide

Saya terkejut ini belum disebutkan - tetapi Anda dapat memilih mode-vi di bash atau ksh dengan melakukan ini:

set -o vi

... atau menggunakan ini sebagai isi ~/.inputrc (untuk GNU readline yang digunakan dalam program seperti bash):

set editing-mode vi

Lalu setelah itu, Anda bisa menggunakannya Esc untuk masuk mode perintah dan gunakan k untuk kembali dalam sejarah, dan j untuk maju. Anda juga dapat mencari menggunakan / untuk mencari secara normal, dan ? untuk mencari secara terbalik.

Jika Anda menggunakan ~/.inputrc, maka ini akan bekerja tidak hanya dalam GNU bash tetapi dalam apa pun yang menggunakan GNU readline seperti CLISP dan mungkin program seperti perintah perintah Shell dan sejenisnya) Shell CPAN.

2
Mei

Untuk beralih ke depan saat menggunakan pencarian terbalik (dengan perintah Ctrl-R):

  1. Buka file .bashrc Anda:
    Sudo gedit ~/.bashrc

  2. tambahkan baris ini (huruf "f" dapat diganti dengan yang lain yang belum digunakan oleh sistem)

    bind '"\C-f": forward-search-history' 
    
  3. Tutup file Anda dan perbarui .bashrc Anda (atau buka terminal lain) dengan perintah:
    source ~/.bashrc atau . ~/.bashrc

SEKARANG ANDA BISA PINDAHKAN MAJU DALAM SEJARAH DENGAN SINGKAT: Ctrl + f

Bekerja di Ubuntu 18,04 LTS

2

Saya menggunakan mengikuti dua sebagian besar waktu.
Tetapi harap perhatikan keduanya mencari chars mulai.

  1. tcsh: ketikkan beberapa charecters dari perintah itu Esc+p itu akan menampilkan perintah sebelumnya dimulai dengan urutan tombol itu tekan lagi itu akan menampilkan perintah lain.
  2. ksh: use fc -e - <SPACE><first few char for your previous > ini akan menjalankan perintah terakhir yang cocok dengan urutan itu.

Saya tidak dapat menemukan sesuatu seperti Ctrl+R di Bash untuk ksh dan tcsh saya.

1
Hemant

Ada cara untuk menggunakannya Ctrl-R dengan tcsh. Tambahkan yang berikut di ~/.cshrc Anda:

bindkey "^r" i-search-back (Itu hanya tanda caret dan huruf r)

Itu penghemat waktu terbesar bagi saya.

1
Alain

jawaban yang mirip dengan @ephemient, tetapi Anda dapat memasukkan .bashrc Anda

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

dan ketik bagian dari frasa, dan kemudian gunakan panah atas/bawah untuk menelusuri opsi terbaru yang cocok. Ini adalah perilaku default matlab.

Bagi kebanyakan orang, jika Anda ingin mem-porting pengaturan Anda ke sistem baru, lebih mudah untuk mengingat hanya merobek ~/.bashrc Anda maka Anda harus merobeknya ~/.inputrc

1
Matt S.

Ya itu ada, setidaknya jika Anda menggunakan zsh. Mulailah mengetik perintah dan kemudian tekan M-p (ESCp) dan itu akan menemukan perintah sebelumnya yang cocok dengan apa yang Anda ketikkan. Tekan lagi untuk menemukan kecocokan berikutnya.

0
dkagedal