.Bash_history içindeki yinelenen girişler nasıl önlenir


108

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.


İlgili bir soru yarattım : askubuntu.com/questions/205520/… . Geçmişdeki yinelemeler bir komutun içeriğini görmek için kullanışlıdır. Geçmişi yazdırırken bazen ihmal etmek istedikleriniz.
sadece

Yanıtlar:


123

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. Bir ignoredupsönceki geçmiş girişiyle eşleşen satırların değeri kaydedilmemesine neden olur. Değeri ignorebothiçin kısaltmadır ignorespace ve ignoredups. 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


~ / .Bashrc altındaki HISTCONTROL = yoksaymayı eklememi ister misiniz?
karthick87

1
@karthick Nereye koyduğunuz önemli değil, alt olsa iyi.
İşaya

Ubuntu 12.04 kurulumumda, bu modifikasyonu yapmak zorunda kaldım. .Bashrc değiştirilirse ~/.bash_loginçoğu zaman işe yarayacaktı ama bu her zaman böyle değildi .
ck

3
Bash profilinizi / rc dosyalarınızı güncelledikten sonra çalıştırmayı unutmayın -source ~/.bashrc && source ~/.bash_profile
Eric Kigathi

23

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.


3
Hala yinelenen var ... Sorun ne olabilir? imgur.com/fXeLQ.png
karthick87

5
@ başka bir yanıt alıntı karthick87: değeri ignoredupsönceki geçmiş girdisi eşleşen nedenleri hatları kaydedilemez için . Yalnızca ardışık aynı satırları kaldırır.
AL

10

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


Neden onun kullanımı export HISTCONTROLseninki değil? Fark ne? İhracat olmadan benim için çalışıyor, sadece merak ediyorum
felwithe

1
İyi soru! Ben de cevabı bilmek istiyorum. Genelde 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.
Nour Wolf,


3

Aşağıdakileri bilgisayarınıza ekleyin ~/.bashrc:

export HISTCONTROL=ignoredups

Bunu yapmak için, bu komutu kullanabilirsiniz:

nano ~/.bashrc

0

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.