Aynı komut geçmişimde tekrar tekrar listeleniyor. Bundan nasıl kaçınabilirim? Bunun mümkün olduğunu biliyorum HISTCONTROLama 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 HISTCONTROLama doğru yolu bulamadım.
Yanıtlar:
Gönderen bashadam 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ğeriignorebothiçin kısaltmadırignorespaceveignoredups. DeğerierasedupsGeç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 .
ignoredupsBir 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 HISTCONTROLseninki değil? Fark ne? İhracat olmadan benim için çalışıyor, sadece merak ediyorum
exportdeğişkeni alt işlemlere uygun kılar. stackoverflow.com/q/1158091/552621 durumunda HISTCONTROL, PROMPT_COMMANDvb, 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 ~/.profileveya benzeri eklemeniz gerekir
:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
O zaman eklemeniz gerekir ~/.bash_logout:
history -a
history -w