Pertanyaan Bagaimana saya bisa mencari sejarah bash dan menjalankan kembali perintah?


Bisakah saya mencari riwayat di bash dan menjalankan hasilnya?


271
2017-07-17 19:23


asal




Jawaban:


Mengetik Ctrl  R pada baris perintah dan mulai mengetik perintah sebelumnya. Setelah hasilnya muncul terus memukul Ctrl  R untuk melihat pertandingan lain. Ketika perintah yang Anda inginkan muncul, cukup tekan Memasukkan

Perhatikan bahwa sementara Ctrl  R adalah default, jika Anda menginginkan perintah (reverse-search-history) untuk terikat Ctrl  T Anda bisa mengonfigurasi itu dengan yang berikut:

ikat '"\ C-t": reverse-search-history'

Ada sejumlah perintah readable bindable lainnya yang tersedia untuk Anda juga. Lihatlah di bash halaman manual.

Bash memiliki banyak fasilitas untuk mencari dan mengakses sejarah perintah interaktif. Yang paling mendasar adalah history builtin. Mengetik saja:

$ sejarah

Akan mencetak daftar perintah bersama dengan indeks numerik, seperti:

$ sejarah
1 bersih
2 ls -al
3 vim ~ / somefile.txt
4 riwayat
$

Anda kemudian dapat menjalankan salah satu dari perintah ini menggunakan indeks numerik mereka dengan menampilkan indeks dengan satu !, sebagai Mitch menunjukkan:

$! 1

Akan mengeksekusi clear perintah. Sejarah bawaan memiliki banyak fitur itu sendiri, Anda dapat melihat lebih banyak di bash dan history halaman manual.

Anda juga dapat menentukan offset negatif relatif saat menggunakan ! penunjuk, jadi gunakan daftar riwayat kami di atas, jika kami ingin mengeksekusi vim lagi, kita bisa melakukan:

$! -2

Yang pada dasarnya mengatakan bash untuk menjalankan perintah yang Anda jalankan "dua perintah yang lalu." Untuk menjalankan perintah sebelumnya dalam daftar riwayat, kita bisa menggunakan !! (Yang hanya singkatan untuk !-1).

Itu ! penunjuk tidak membatasi Anda untuk menentukan secara numerik perintah mana yang harus dijalankan. hayalci menunjukkan bahwa Anda dapat menginstruksikan bash untuk menjalankan perintah berdasarkan teks yang diawali dengan (menggunakan !) atau teks di dalam perintah itu sendiri (menggunakan !?). Sekali lagi, gunakan daftar riwayat contoh kita di atas, jika kita ingin mengeksekusi clear lagi, yang perlu kita lakukan hanyalah mengetik:

$!

dan tekan Memasukkan. Dan bagaimana dengan vim? Itu sesederhana:

$!? beberapa

Poin terpenting dari hayalciJawabannya adalah panggilan ke shopt builtin:

$ shopt -s histverify

Ini akan mengaktifkan verifikasi riwayat sehingga perintah yang dicocokkan oleh !, !!, dan !? para perancang tidak secara membabi buta dieksekusi, tetapi malah diisi pada baris perintah sehingga Anda dapat memastikan bahwa mereka tidak akan melakukan kejahatan sebelum mengeksekusinya. Ini bahkan lebih penting ketika Anda menjalankan perintah sebagai pengguna root. Opsi ini dapat diatur di Anda .bashrc file startup sehingga diatur kapan pun Anda masuk.

Seperti telah ditunjukkan, semua informasi ini dapat diperoleh dari bash halaman manual. Untuk!, !!, dan!? perancang, lihat Bagian 9.3 Ekspansi Riwayat.


392
2017-07-17 19:25



+1 Saya Telah Menggunakan Linux selama lebih dari 12 tahun untuk semua sistem. Saya tidak tahu itu ada. Berharap saya bisa +10 bagaimana aku merindukannya ?? - Aiden Bell
Saya tidak menemukannya sampai saya mulai menggunakan emacs secara teratur. Kemudian saya secara tidak sengaja mengetiknya pada suatu hari (berpikir saya berada di emacs). - Sean Bright
Pada banyak sistem, menekan panah atas melakukan hal yang sama. - mas
Panah atas untuk saya hanya pergi ke perintah sebelumnya. Tapi ya, semuanya bisa dibedakan dengan apa pun yang Anda inginkan. - Sean Bright
Juga setelah menekan CTRL + R Anda dapat menggunakan CTRL + SHIFT + R beberapa kali untuk melompat kembali ke perintah sebelumnya - Gal Bracha


Sebagai alternatif untuk crtl + R, Anda dapat mencari sejarah dengan mengetik

!text

Ini akan mencari sejarah untuk perintah terbaru awal dengan 'teks'.

Tapi saya sarankan Anda meletakkan ini di .bashrc Anda untuk mencegah eksekusi perintah yang salah.

shopt -s histverify

Ini menginstruksikan bash seperti itu, setelah apa saja tindakan sejarah (seperti !!:s/prev_text/after_text), ia menempatkan baris yang dihasilkan ke command prompt. Kemudian Anda dapat meninjau atau mengedit perintah, dan tekan Enter sesudahnya.


34
2017-07-17 20:40



Gunakan!? Teks untuk menjalankan ulang perintah terbaru yang berisi (sebagai lawannya dimulai dengan) "teks". - mark4o
Jika seseorang mengonsolidasi '!', '!!', '!?', 'History | grep ', dan' ctrl-r 'menjadi jawaban yang komprehensif, saya akan memilihnya. - Richard Hoskins


Anda juga bisa melakukan:

history | grep "stuff"

itu akan mengembalikan sesuatu seperti itu

num stuff

maka Anda bisa mengetik

!num

27
2017-07-17 20:21





Saya lebih suka menggunakan histori-penelusuran-mundur atas riwayat pencarian balik. Yang pertama memungkinkan Anda mengetik beberapa karakter dari perintah kemudian tekan tombol pencarian, sebagai lawan memukul kunci pencarian pertama kemudian mengetikkan string pencarian.

Secara default di sistem saya, M-p dan M-n mengikat ke fungsi yang serupa tapi saya lebih suka mengikat tombol panah:

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

14
2018-02-02 20:32





Langgan yang luar biasa, Sean! Saya menaruh ini dalam komentar, tapi saya beberapa poin reputasi malu. :-)

Teknik lain yang terkait dan berguna adalah kemampuan untuk menjalankan perintah sebelumnya saat mengubah kata. Katakanlah Anda salah ketik nama direktori, atau ingin mengubah nama file:

$ echo namaku bob
nama saya adalah Bob
$ ^ bob ^ jordan
echo namaku adalah jordan
nama saya jordan

Perhatikan bahwa perintah diperluas, diganti, dan keluaran sebelum perintah dijalankan, jadi jika perintah yang salah dijalankan Anda dapat melihat apa yang dipikirkan oleh bash tersebut.


12
2017-09-10 14:23





Saya memiliki alias yang sangat hebat, h. Ini benar-benar hanya "history | grep", tapi saya menyaring entri "h perintah" sebelumnya dengan "grep-E -v"

alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "

digunakan seperti

h aliases
2003  less .bash_aliases

12
2017-09-25 16:45



Ini juga dapat dilakukan dengan menambahkan perintah ke HISTIGNORE. - tanenbring


Karena navigasi melalui riwayat menggunakan Ctrl-r adalah rumit, Anda mungkin ingin mempertimbangkannya hh:

https://github.com/dvorka/hstr

yang membuat navigasi lebih sederhana, lugas dan efisien - termasuk menjalankan perintah:

enter image description here


5
2017-12-18 16:37



Bagaimana cara menggunakannya? Tombol mana yang harus ditekan untuk melihat gambar ini? - Nakilon
Setelah Anda menginstal, Anda dapat menggunakan perintah hh ATAU mengikatnya ke pintasan keyboard apa pun (biasanya Ctrl-r) seperti yang dijelaskan dalam dokumentasi. - Martin Dvorak
itu mengikat ctrl + r secara default sekarang - Alleo


Pada prompt perintah bash, ketik control-R, kemudian ketik beberapa karakter dari perintah yang Anda inginkan dan bash's readline fasilitas akan mencari melalui sejarah perintah untuk perintah itu.

Setelah Anda memulai pencarian, Anda dapat mengetikkan kontrol-R lagi untuk melompat ke perintah pencocokan berikutnya.


3
2017-09-04 04:55





Jika Anda memiliki shell yang dikonfigurasi untuk digunakan vi binding kunci (set -o vi atau memiliki set editing-mode vi di $HOME/.inputrc), lalu Anda mencari dengan <Esc>/some-command<Return> dan tekan n (berikutnya) atau Shift-n (sebelumnya) untuk menggilir sejarah baris perintah.


3
2017-11-22 15:21



Yang ini paling dekat dengan pengguna vim. - Gabor Marton


CTRL+R berfungsi dengan baik, seperti yang disarankan @ John1024, tetapi agak membosankan jika banyak dari perintah Anda yang terbaru serupa dan Anda ingin cara cepat untuk memindai semuanya. Sebuah alternatif akan digunakan history:

$ history | grep keyword

2
2017-09-04 05:11