Aynı komut geçmişimde tekrar tekrar listeleniyor. Bundan nasıl kaçınabilirim? Bunun mümkün olduğunu biliyorum HISTCONTROL
ama doğru yolu bulamadım.
Aynı komut geçmişimde tekrar tekrar listeleniyor. Bundan nasıl kaçınabilirim? Bunun mümkün olduğunu biliyorum HISTCONTROL
ama doğru yolu bulamadım.
Yanıtlar:
Gönderen bash
adam sayfası:
HISTCONTROL
Komutların geçmiş listesine komutların nasıl kaydedildiğini kontrol eden, iki noktalardan ayrılmış bir değerler listesi. Değerlerin listesi içeriyorsa
ignorespace
, boşluk karakteriyle başlayan satırlar geçmiş listesine kaydedilmez. Birignoredups
önceki geçmiş girişiyle eşleşen satırların değeri kaydedilmemesine neden olur. Değeriignoreboth
için kısaltmadırignorespace
veignoredups
. Değerierasedups
Geçerli satırla eşleşen önceki tüm satırların, o satır kaydedilmeden önce geçmiş listesinden kaldırılmasına neden olur. Yukarıdaki listede olmayan herhangi bir değer göz ardı edilir. HISTCONTROL ayarlanmamışsa veya geçerli bir değer içermiyorsa, kabuk ayrıştırıcı tarafından okunan tüm satırlar, HISTIGNORE değerine bağlı olarak geçmiş listesine kaydedilir. Çok hatlı bir bileşik komutun ikinci ve sonraki satırları test edilmez ve HISTCONTROL'ün değerinden bağımsız olarak geçmişe eklenir.
Öyleyse, içine şu satırı koy ~/.bashrc
:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_login
çoğu zaman işe yarayacaktı ama bu her zaman böyle değildi .
source ~/.bashrc && source ~/.bash_profile
Bunu içine sok ~/.bashrc
:
export HISTCONTROL=ignoredups
Bunun yerine kullanabilirsiniz ignoreboth
. Bu hem kısaca ignorespaces
(boşluklarla başlayan komutlar) hem de ignoredups
(kopyalar) kısaca .
ignoredups
Bir web sitesinden bir komut kopyaladığımda öndeki boşluklara sahip olan komutları görmezden gelmenin varsayılan davranışını bulmaya başladığım için kendi başıma tercih ederim , çünkü yanlışlıkla bir alana da kopyaladığım için kaydedilmedi. her biri kendi.
ignoredups
önceki geçmiş girdisi eşleşen nedenleri hatları kaydedilemez için . Yalnızca ardışık aynı satırları kaldırır.
Bunu koymak ~/.bashrc
, alvin'in çözümünü farklı oturumlar boyunca uygulayacaktır.
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
Kaynak: Linux: Bash tarihçesi: “yok sayılanlar” ve “silinen” oturumlar arasında ortak tarih ile çatışıyor
export HISTCONTROL
seninki değil? Fark ne? İhracat olmadan benim için çalışıyor, sadece merak ediyorum
export
değişkeni alt işlemlere uygun kılar. stackoverflow.com/q/1158091/552621 durumunda HISTCONTROL
, PROMPT_COMMAND
vb, bu değişkenler belki (çocuklara işler) gerekli değildir onları ihraç kabuğun kendisi tarafından kullanılmaktadır.
export HISTCONTROL=erasedups
Her yeni komutu uniqely olarak kaydetmek zordur. Öncelikle ~/.profile
veya benzeri eklemeniz gerekir
:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
O zaman eklemeniz gerekir ~/.bash_logout
:
history -a
history -w