Tarihten tek bir satır nasıl çıkarılır?


Yanıtlar:


338

Önleyici tedbirler

Komutu tarihe kaydetmeden çalıştırmak istiyorsanız, fazladan bir boşluk ile hazırlayın.

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

Bu işlemin gerçekleşmesi için ya da gerek ignorespaceyoksa ignorebothiçinde HISTCONTROL. Örneğin, koş

HISTCONTROL=ignorespace

Bu ayarı kalıcı hale getirmek için içine koyun .bashrc.

Ölüm sonrası temizlik

Komutu zaten çalıştırdıysanız ve geçmişi geçmişten kaldırmak istiyorsanız, ilk önce

history

Geçmişinizde komutların listesini görüntülemek için Silmek istediğiniz numaranın yanındaki numarayı bulun (örn. 1234) ve

history -d 1234

Ek olarak, silmek istediğiniz satır zaten $ HISTFILE’nize yazılmışsa (bu genellikle varsayılan olarak bir oturumu sonlandırdığınızda olur), $ HISTFILE’a tekrar yazmanız gerekir; oturum, toplantı, celse:

history -w

İşe yaradı. Bence değiştirdikten sonra ~ / .bashrc kaynağına ihtiyacımız var ...
B Seven

3
@ jw013 PROMPT_COMMAND değerini history -a, normal konfigürasyonda çıkış yapmak yerine geçmiş dosyaya zaten yazıldığından ayarladım . Özellikle: mywiki.wooledge.org/BashFAQ/088
Ürdün

5
Tek bir satırı sildikten sonra, geçerli geçmişi $ HISTFILE cihazınıza yazmanız gerekir history -w. Aksi halde çıktığınızda, silinen çizgi hala oradadır!
Felipe Alvarez,

1
Yukarıdaki yoruma +1; kullanarak history -wSONRA history -d {num}kritik çerez cevaba eklenmesi gerektiğini, aksi takdirde bir kullanıcı geçerli kabuk aslında kalıcıdır gelen geçici silmek düşünebilir - tam olarak ne ihtiyaç vardı.
michael

1
@BobStein history -w, zaten .bash_historydosyaya yazılmış olan girişler için gereklidir . Nasıl yeniden üretilir (örneğin, stok konfigürasyonlu CentOS 7'de): 1. giriş 2. komutu girin echo foo3. çıkış 4. tekrar giriş 5. giriş echo foo6. silme çıkış 7. giriş tekrar: giriş hala var. Bash tarihinizi nasıl yapılandırdığınıza bağlı olarak, belki de bu konuyu başka şekillerde de çoğaltabilirsiniz - örneğin, oturumu kapatmadan önce tarih yazmasını kışkırtıyorsanız.
maxschlepzig

53
  1. Tüm geçmişinizi temizlemek için

    history -c
  2. Tek bir satırı silmek için

    history -d linenumber

6

Bu benim içinde var ~/.bashrc, bu komutun $ forgetönceki komutu silip tarihe geçmesini sağlar.

function forget() {                                                              
   history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);              
}

Bu biraz karışık görünüyor. Daha history -d $( history | tail -n 1 | cut -f 1 -d " " )basit olmaz mıydı ?
seumasmac

1
history | tail -n1olduğunu historybu yüzden bu sayıyı silme komutu kendisi yanlış girdiyi alır. Bununla birlikte, history -d $( history | awk 'END{print $1-1}' )satır seçimi, alan seçimi ve çıkarma işlemlerini birleştirir.
dave_thompson_085

Birinin bunu zshell'e anlatması için yardım etmesi mümkün mü?
Alex,

6

~/.bash_historyBir girişi veya birden fazla girişi silmek istediğinizde yararlı olan girişleri istediğiniz zaman düzenleyebilir ve kaldırabilirsiniz.


2
Büyük olasılıkla bu girişler, kabuktan çıktığınızda yeniden girilecektir.
l0b0

5

Bash oturumunun tamamını unutmak istiyorsanız kill, geçerli bash işlemini yapabilirsiniz. Değişken yana $$tutun pidşimdiki kabuğun, bunu yapabilirsiniz:

kill -9 $$

1

Geçmişi temizledikten sonra değişiklikleri yazmanız gerekir. Geçmişinizde geçmiş silme komutunu almak istemiyorsanız, komutu şöyle çalıştırmanız gerekir:

history -c && history -w && logout

İyi şanslar.


-1
Adding another point suppose if you want to delete a range of history lines

You can use below script. 

Below example will delete history output from line 1 to line 150.

for i in `history | awk 'NR > 1 && NR <=150{print   $1}'`; do history -d $i; done
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.