Perintah yang sama tercantum dalam histori saya berulang kali. Bagaimana saya bisa menghindari ini? Saya tahu itu mungkin terjadi HISTCONTROL
tetapi saya belum menemukan cara yang benar.
Perintah yang sama tercantum dalam histori saya berulang kali. Bagaimana saya bisa menghindari ini? Saya tahu itu mungkin terjadi HISTCONTROL
tetapi saya belum menemukan cara yang benar.
Jawaban:
Dari bash
halaman manual:
HISTCONTROL
Daftar nilai yang dipisahkan oleh titik dua yang mengendalikan bagaimana perintah disimpan pada daftar riwayat. Jika daftar nilai termasuk
ignorespace
, garis yang dimulai dengan karakter spasi tidak disimpan dalam daftar riwayat. Nilaiignoredups
garis penyebab yang cocok dengan entri riwayat sebelumnya tidak disimpan. Nilaiignoreboth
adalah singkatan untukignorespace
danignoredups
. Nilai darierasedups
menyebabkan semua baris sebelumnya yang cocok dengan baris saat ini dihapus dari daftar riwayat sebelum baris itu disimpan. Nilai apa pun yang tidak ada dalam daftar di atas diabaikan. Jika HISTCONTROL tidak disetel, atau tidak menyertakan nilai yang valid, semua baris yang dibaca oleh parser shell disimpan pada daftar histori, tunduk pada nilai HISTIGNORE. Baris kedua dan selanjutnya dari perintah majemuk multi-baris tidak diuji, dan ditambahkan ke histori terlepas dari nilai HISTCONTROL.
Jadi, letakkan baris berikut di Anda ~/.bashrc
:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_login
besar waktu itu akan berfungsi jika. Bashrc dimodifikasi tapi itu tidak terjadi sepanjang waktu.
source ~/.bashrc && source ~/.bash_profile
Tempelkan ini di ~/.bashrc
:
export HISTCONTROL=ignoredups
Anda bisa menggunakan ignoreboth
. Ini singkatan untuk keduanya ignorespaces
(perintah dimulai dengan spasi) dan ignoredups
(duplikat).
Saya lebih suka ignoredups
sendiri karena saya menemukan perilaku default mengabaikan perintah dengan spasi di depan cukup menjengkelkan ketika saya menyalin perintah dari situs web dan itu tidak disimpan karena saya tidak sengaja menyalin di spasi juga .... Tapi untuk masing-masing sendiri.
ignoredups
garis penyebab yang cocok dengan entri riwayat sebelumnya tidak disimpan . Itu hanya menghilangkan garis identik yang berurutan.
Memasukkan ini ~/.bashrc
akan menerapkan solusi @ alvin di berbagai sesi sebagai wlell
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
Sumber: Linux: Bash history: "ignoredups" dan "erasedups" mengatur konflik dengan histori umum lintas sesi
export HISTCONTROL
dan milikmu tidak? Apa bedanya? Ini bekerja untuk saya tanpa ekspor, saya hanya ingin tahu
export
membuat variabel tersedia untuk sub-proses. stackoverflow.com/q/1158091/552621 Dalam kasus HISTCONTROL
, PROMPT_COMMAND
dll, variabel ini digunakan oleh shell itu sendiri jadi mungkin mengekspor mereka (anak-anak proses) tidak diperlukan.
export HISTCONTROL=erasedups
Untuk merekam secara unik setiap perintah baru itu rumit. Pertama, Anda perlu menambahkan
~/.profile
atau serupa:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Maka Anda perlu menambahkan ~/.bash_logout
:
history -a
history -w