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.
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 )
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.
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.
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.)
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.
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"
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).
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.
Untuk beralih ke depan saat menggunakan pencarian terbalik (dengan perintah Ctrl-R):
Buka file .bashrc Anda:Sudo gedit ~/.bashrc
tambahkan baris ini (huruf "f" dapat diganti dengan yang lain yang belum digunakan oleh sistem)
bind '"\C-f": forward-search-history'
source ~/.bashrc
atau . ~/.bashrc
SEKARANG ANDA BISA PINDAHKAN MAJU DALAM SEJARAH DENGAN SINGKAT: Ctrl + f
Bekerja di Ubuntu 18,04 LTS
Saya menggunakan mengikuti dua sebagian besar waktu.
Tetapi harap perhatikan keduanya mencari chars mulai.
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.
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.
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
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.