Perintah yang sama tercantum dalam histori saya berulang kali. Bagaimana saya bisa menghindari ini? Saya tahu itu mungkin terjadi HISTCONTROLtetapi 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 HISTCONTROLtetapi saya belum menemukan cara yang benar.
Jawaban:
Dari bashhalaman 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. Nilaiignoredupsgaris penyebab yang cocok dengan entri riwayat sebelumnya tidak disimpan. Nilaiignorebothadalah singkatan untukignorespacedanignoredups. Nilai darierasedupsmenyebabkan 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_loginbesar 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 ignoredupssendiri 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.
ignoredupsgaris penyebab yang cocok dengan entri riwayat sebelumnya tidak disimpan . Itu hanya menghilangkan garis identik yang berurutan.
Memasukkan ini ~/.bashrcakan 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 HISTCONTROLdan milikmu tidak? Apa bedanya? Ini bekerja untuk saya tanpa ekspor, saya hanya ingin tahu
exportmembuat variabel tersedia untuk sub-proses. stackoverflow.com/q/1158091/552621 Dalam kasus HISTCONTROL, PROMPT_COMMANDdll, 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
~/.profileatau serupa:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Maka Anda perlu menambahkan ~/.bash_logout:
history -a
history -w