Geçmişi kaydetmeden bir terminali nasıl kapatabilirim?


33

Bir kereden fazla yanlışlıkla birkaç komut çalıştırdım ve bash geçmişimi kirlettim. Bash tarihimi kaydetmeden terminalimi nasıl kapatırım? Fedora kullanıyorum.

Yanıtlar:


25

Kabuğunuzun geçmişi, HISTFILEdeğişken tarafından belirtilen dosyaya kaydedilir . Yani:

unset HISTFILE

Bu aynı zamanda zsh için de geçerlidir, ancak $HISTFILEkabuk başladığında belirtilen dosyaya kaydetmeye devam eden ksh için de geçerli değildir (ve bunun tersine, kabuğunuzu başlattıktan sonra geçmişinizi ksh olarak kaydetmeye karar verirsiniz).


Geçmişi kirlettikten sonra oturumu kapatmadan önce bunu kullanabilir miyim? ve bu oturum için ust? giriş yaptığımda bir set HISTFILEdahaki sefere ihtiyacım yok ? (Bu doğru veya yanlış olup olmadığını sadece söylemek)

@ acidzombie24 Bu doğru, ortam değişkenlerinde yapılan değişiklikler, değişiklikleri açıkça kaydetmediğiniz sürece, örneğin rc dosyalarında, oturumlar arasında kaydedilmez.
jw013

31

Kısa cevap:

Komut istemine şunu yazın:

$ kill -9 $$

Bu hemen yapmak mümkün kabuk olmadan kabuk öldürecek bir şey , tarihin kaydet, tuzak olarak sinyalini böyle yürütmek ~/.bash_logoutDuran işleri uyarmak veya bu iyi şeyler.

Uzun cevap:

Not: Bu seçenekler birbirini dışlayan değildir ; hepsi bir kerede kullanılabilir.

Seçenek 1:

Geçmiş dosyanızı düzene sokmak konusunda mükemmeliyetçiyseniz, yapabileceğiniz şey, HISTIGNOREdeğişkeni kaydedilmesini istemediğiniz komutların glob'larını içerecek şekilde değiştirmek . Örneğin, o zaman HISTIGNORE='ls*:cd*'kendi ~/.bashrcörneğinize eklerseniz , geçmiş dosyanıza eklenebilir lsve cdeklenemez.

Seçenek 2:

Komutunuza göre komutların geçmişinizde hangi komutların kaldığını kontrol etmek istiyorsanız, HISTCONTROL='ignorespace'boşlukla başlayan komut satırlarını atlayacak şekilde ayarlayabilirsiniz . Kullanmak ignorebothda tekrarlanan satırları atlar. Ardından, komut girmeden önce boşluk çubuğuna basmak, geçmiş dosyanızda görünmemesine neden olur.

Seçenek 3:

Eğer sadece terminali kapattığınızda kabuk derhal çıkarsa trap, terminal programın kabuğu gönderdiğini ( xtermörneğin gönderir SIGHUPsonra kabuğun çıkmasını bekler) sinyal gönderebilirsiniz ve tarihçeyi kaydetmeden çıkabilirsiniz. bu sinyali alır. Şunu da ekle ~/.bashrc:

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP

2
'Kill -9 $$' yöntemi için +1. Bu kesinlikle HISTIGNORE vb .'nin salt okunur olarak ayarlandığı durumlar için bir yoldur.
Corey Henderson

7
kill -9Her şey başarısız olduğunda korkunç durumlar dışında bir şey için kullanmayı teşvik etmenin iyi bir fikir olduğunu sanmıyorum .
Christoffer Hammarström 21:11

1
SIGKILL'in gönderilmesi hiçbir zaman standart çalışma prosedürü olarak iyi bir fikir değildir. HISTFILE'i ayarlamak gibi uygun prosedürleri kullanın.
Arcege

@Arcege TMTOWTDI.
amfetamachine

Tersini bilmek istedim - ne yazık ki tarihini kurtaracağından emin olarak bash'ı nasıl öldüreceğimizi - ve bu sorumu yanıtladı.
mveroone

3

history -cHemen önce kimsenin önermediğini görünce şaşırdım exit. IINM (Ben uzman değilim) güzel yapacak.


2
Doğru yoldasınız: history -rgeçmiş dosyasını yeniden okuyacak, böylece kaydetme işlemi bir işlem yapmaz.
Simon Richter

Tarihi yıkamak kötü bir alışkanlıktır ... kabuk tarihi, kimin ne yaptığı hakkında pek çok faydalı bilgi içerir. platformlarınızda yeni olan insanlar için çok faydalıdır (belgeleriniz konusunda% 100 güvendiğiniz sürece, değişim yönetimi)
Franklin Piat

2

Geçmiş dosyasını belirlemek için bash'ın kullandığı ve kabuk çıkarken ne kadar satır yazılacağını belirten iki ortam değişkeni vardır.

Bunlardan biriyle oturumunuzun geçmişini atabilirsiniz (geçmiş dosyanızdan kaldırmak istediğiniz oturum sırasında ayarlanmış):

HISTFILE=/dev/null

veya

HISTSIZE=0

Bunlardan biri Fedora'daki Bash'de gayet iyi çalışıyor


1

Komuta geçmişini neden bu kadar önemsiyorsun bilmiyorum. Sık sık belirli komutlara ihtiyaç duyuyorsanız, onlar için takma adlar tanımlarsanız daha fazla eğlenebilirsiniz, böylece onları tarihte aramak zorunda kalmak yerine iki tuşa basarak geri alabilirsiniz.


0
  1. Eli çoktan, size kurulacak olan Bash için doğru cevabı verdi HISTSIZE=0.

  2. Ben sadece GNU ekran için yapmak için bir yöntem eklerdim . Ctrl+AArdından (ekrandan çıkış sırası) tuşuna basın :scrollback 0. Bu geri kaydırma geçmişini siler. Şimdi :scrollback 15000geri kaydırma arabellek boyutunu sıfırlamak için hemen yapabilirsiniz .


OP ne zaman kullandıklarını söyledi screen(1)?
amphetamachine

O yapmadı. Ancak, Bash'i bir ekran oturumu içinde çalıştırıyor olabilirsiniz ve HISTSIZE = 0 aktivite detaylarınızı hala ekranın geri kaydırma tamponunda bırakacaktır. Yani, gerçekten temiz olmasını istiyorsan, bunu da yapmalısın scrollback=0.
gsbabil

Kaydırma tamponu, pencere kapandığında temizlenir (örneğin, kabuk çıktığında). Peki ya Ctrl-a H yazarsanız? Kayıt dosyasını öldürür mü?
amfetamachine

@ amphetamachine: hayır, sadece geçerli pencerenin günlüğe kaydedilmesini başlatacak / bitirecektir. Ne kadarı Ctrl+a Hne de Ctrl+a :cleargeçmişi kaldıracak. İhtiyacın var Ctrl+a :scrollback 0. Kendin test edebilirsin. Yeni bir ekran oturumu başlatın. Şimdi bir yap cat /etc/passwd. Şimdi, yukarıdakilerden herhangi birini yapın - Ctrl+a Hveya Ctrl+a :clear. Şimdi, Ctrl+a [yukarı ve sonra ne kadar kopyalayabileceğinizi görmek için yukarı ok tuşunu kullanarak ekran tamponundan kopyalamayı deneyin . Ctrl+a :scrollbackArdından bir a yaptıysanız clear, herhangi bir geri kaydırma tamponu olmayacağından, yalnızca geçerli pencerede gördüğünüz kadar ileri gidersiniz.
gsbabil
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.