Komutların Bash geçmişinde görünmesini nasıl engelleyebilirim?


96

Bazen, gibi komutları çalıştırdığımda rm -rf XYZ, bunun Bash geçmişine kaydedilmesini istemiyorum, çünkü yanlışlıkla aynı komutu tekrar çalıştırabilirim reverse-i-search. Bunun olmasını önlemenin iyi bir yolu var mı?



İken bash olabilir (bu yüzden programlama) kabuk programları yazmaya kullanılacak, bu belirli bunun yönü (tarih interaktif-tek şeydir) programlama ile kesinlikle ilgisi yoktur. Kapanış oylaması.
paxdiablo

Yanıtlar:


114

Eğer kurduysanız HISTCONTROLçevre değişkeni ignoreboth(genellikle varsayılan olarak ayarlanır), önde gelen uzay karakteri ile komutları (kopya olarak da) tarihinin depolanmaz.

Örneğin:

$ HISTCONTROL=ignoreboth
$ echo test1
$  echo test2
$ history | tail -n2
 1015  echo test1
 1016  history | tail -n2

İşte man bashşöyle diyor:

HISTCONTROL

Komutların geçmiş listesine nasıl kaydedildiğini kontrol eden iki nokta üst üste işaretiyle ayrılmış değerler listesi. Değerler listesi içeriyorsa ignorespace, bir boşluk karakteriyle başlayan satırlar geçmiş listesine kaydedilmez . Bir değer ignoredups, önceki geçmiş girdisiyle eşleşen satırların kaydedilmemesine neden olur. Değeri ignorebothiçin kısaltmadır ignorespaceve ignoredups. Bir değeri erasedups, geçerli satırla eşleşen tüm önceki 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. Eğer HISTCONTROLkaldırılırsa ya da geçerli bir değer içermiyorsa, tüm çizgiler, geçmiş listesinde kaydedilir kabuk ayrıştırıcı tarafından değerine konusunu okumakHISTIGNORE. Çok satırlı bir bileşik komutun ikinci ve sonraki satırları test edilmez ve değerine bakılmaksızın geçmişe eklenir HISTCONTROL.

Ayrıca bakınız:


53

.Bashrc / .bash_profile dosyanıza / istediğiniz yere koyun export HISTIGNORE=' *'. Ardından, yok saymak istediğiniz herhangi bir komuta bir boşlukla başlayın.

$ ls  # goes in history
$  ls # does not

4
Bu HISTCONTROL, mutlaka ignorespaceayarlanmış olması gerekmeyen ortam değişkeninin değerine bağlıdır .
sorpigal

3
Eğer HISTCONTROLiçeriyorsa ignorespace, aslında sadece '*' içerisine dahil etmek gereksizdir HISTIGNORE. İkisi bağımsız olarak çalışır.
chepner

22

Daha da iyi kullanım HISTIGNORE. Bu, göz ardı edilecek bir model kümesi belirlemenize olanak tanır (örneğin rm). Bu, (bence) tüm tarihi aktarmaktan daha iyidir /dev/null.


Ah evet, bunu unuttum :)
Corey Henderson

13
kill -9 $$

Bunun önceki cevaplar kadar iyi olmadığını biliyorum, ancak bu mevcut Bash kabuğunu hiçbir şey kaydetmeden öldürecek, HISTCONTROL varsayılan olarak ayarlanmadığında kullanışlıdır, ayarlamayı unuttunuz veya saf ve basit bir ön boşluk koymayı unuttunuz. ve sadece bazı şifreler yazdınız ve bunların kalıcı olarak geçmişte kalmasını istemiyorsunuz.

Bu hızlı yoldur ve geçmiş dosyasını silmek gibi bir şey o kadar iyi değildir çünkü bunu bir geçmiş kaydetme kabuğunun dışında yapmanız gerekir (farklı kullanıcı olarak oturum açın ve su / sudo kullanın, bir arka plan işi oluşturma, vb.)


8

İki şeyden birini yapabilirsiniz:

export HISTFILE=/dev/null

Veya komuta boşlukla başlayın.


5
önceki boşluk bu harika
Eric Fortis

8
Bazılarımız bir boşluk ile ön eklenmiş komutları otomatik olarak yok saymanın gerçekten kötü bir fikir olduğunu ve bu nedenle ignorespacevarsayılan olarak ayarlanmadığını düşünüyoruz.
sorpigal

3
HISTFILEBu şekilde ayarlama herhangi bir geçmişin saklanmasını engeller ve komutun bellek içi geçmişe eklenmesini engellemez.
chepner

3

Veya

unset HISTFILE

(önceki yanıta benzer olarak sadece daha kısa: dışa aktar HISTFILE = / dev / null)


1
Bu, bellek içi geçmişi değil, yalnızca disk üzerindeki geçmişi etkiler.
chepner

2

Kabuk başlangıcında, geçmişi orada olmasını istemediğim girdilerden açıkça temizlerim. Örneğin rm -rf, geçmişte herhangi bir şey istemiyorum (sadece tek bir Arrow-Up+ Enter:)

Aşağıdaki parçacığı init dosyama koydum (ile çalışır, ile .zshrcde çalışır .bashrc)

# ...
HISTFILE=~/.zshhistory
# ...

# remove dangerous entries from the shell history
temp_histfile="/tmp/$$.temp_histfile"
grep -v -P '^rm .*-rf' $HISTFILE > $temp_histfile
mv $temp_histfile $HISTFILE
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.