Dapatkan bash history untuk mengingat hanya perintah yang dijalankan dengan ruang yang diawali!

10

Perintah yang dijalankan di terminal yang diawali dengan ruang kosong tidak direkam dalam file riwayat perintah. Tetapi apakah ada cara untuk mendapatkan kebalikannya yaitu sejarah seharusnya hanya mencatat yang diawali dengan ruang?

tepat
sumber

Jawaban:

12

Anda dapat membalikkan pengaturan default Ubuntu dengan menetapkan dua variabel (HISTIGNORE dan HISTCONTROL), gunakan perintah seperti di bawah ini:

HISTIGNORE='!( *)'
HISTCONTROL=ignoredups

HISTCONTROL=ignoredupsmengubah perilaku riwayat menjadi hanya mengabaikan garis duplikat, dan tidak mengabaikan garis yang dimulai dengan spasi. (Anda juga dapat mengatur HISTCONTROL ke string kosong (dengan HISTCONTROL=) jika Anda ingin menyimpan duplikat, tetapi itu biasanya tidak diinginkan.)

HISTIGNORE='!( *)'membuat sejarah mengabaikan setiap baris yang tidak dimulai dengan spasi: ( *)akan cocok dengan setiap baris yang dimulai dengan spasi, tetapi pemimpin !meniadakan pertandingan, sehingga cocok dengan semua yang tidak dimulai dengan spasi. Dan segala sesuatu yang cocok dengan pola HISTIGNORE akan diabaikan oleh sejarah. (Opsi terakhir ini mengharuskan bash dijalankan dengan extglobdihidupkan, dengan shopt -s extglob, tetapi itu adalah pengaturan default pada Ubuntu.)

Jika Anda ingin menjadikan ini permanen, jangan lupa untuk memasukkan kedua perintah di atas ke dalam ~/.bashrc.

elang
sumber
terima kasih, itulah yang saya inginkan .. menyimpan perubahan pada .bashrc.. Saya membutuhkan itu untuk mencegah bash dari merekam setiap perintah cd, lss dan sehari-hari lainnya yang saya gunakan; dan untuk beberapa perintah yang saya butuhkan dalam sejarah, sekarang saya dapat menggunakan awalan ..
tepatnya
1
@rusty Jika Anda hanya ingin mengecualikan beberapa perintah sepele, mungkin lebih baik bagi Anda jika Anda menggunakan sesuatu seperti HISTIGNORE='ls*:cd*', yang akan membuat riwayat mengabaikan setiap baris yang dimulai dengan lsatau cd, Anda dapat memperluas daftar itu dengan perintah lain, cukup masukkan :perintah di antara . Tapi jangan lupa bahwa fitur perintah ingat yang dapat Anda akses dengan "tombol panah ke atas" juga menggunakan riwayat ini, jadi jika Anda mengatur sesuatu untuk diabaikan, Anda tidak akan dapat mengingat perintah yang diabaikan itu dengan " panah atas ".
Falcon
Saya ingin mengabaikan perintah SSH, tetapi bukan perintah seperti ssh-copy-idatau ssh-keygen. Di HISTIGNORE, saya memasukkan " ssh\ *" perintah saya yang diabaikan lainnya. Melarikan diri dari char space tampaknya wajib.
user38537
2

" Perintah yang dijalankan di terminal yang diawali dengan ruang kosong tidak direkam dalam file riwayat perintah "

Ya begitulah.

sejarah terminal

TuanVaykadji
sumber
1
itu adalah pengaturan di bash ;-)
Rinzwind
perintah diawali dengan spasi kosong. Seperti `sudo apt-get update`
Avinash Raj
Berapa nilai variabel HISTCONTROL Anda?
glenn jackman
@AvinashRaj: yeah, lihat saya perintah "ini tidak boleh direkam", saya menaruh spasi (terlihat baik di baris perintah dan sejarah). Jadi tidak bekerja seperti itu. Mungkin Anda bisa mengonfigurasinya (dengan HISTCONTROL); tetapi ini bukan kasusnya secara default.
MrVaykadji