Bir komutun geçmişinize eklenmesini engellemenin bir yolu var mı?


65

Bir komutun geçmişinize eklenmesini engellemenin bir yolu var mı? Geçmiş dosyamdan uzak durmak istediğim bir emir var ve hafızada saklanan geçmişi ararken gerçekten orada olmasını umursamıyorum, ancak bu daha az endişe verici. Bunu önlemenin bir yolu var mı, yoksa sadece geçmiş dosyamı geri alıp düzenlemek zorunda mıyım?

güncelleme: Bunun kabuğa özgü olabileceğini anlamadım. Benim kabuğum zsh. Diğer kabuklara cevap verebilirsiniz, böylece insanlar bunu kabuğunda nasıl yapacaklarını bilirler.


zsh cevabına çapraz bağlanma: superuser.com/questions/352788/…
Michael Shigorin

Yanıtlar:


52

ZSH’de :

İlk setopt HIST_IGNORE_SPACEönce sana ekle ~/.zshrc. Şimdi tekrar giriş yaptıktan sonra, tarihte saklamak istemediğiniz komutları a ile öneki yapabilirsiniz space.

Gönderen kılavuzdaki aşağıdaki 3 seçenek belli çizgiler hiç tarihin girmeyeceğim gerektiğini söylemek kullanılabilir:

  • HIST_IGNORE_SPACE boşluk bırakılmış komutları saklamıyor
  • HIST_NO_STORE tarih ( fc -l ) komutunu saklama
  • HIST_NO_FUNCTIONS işlev tanımlarını saklamaz

herhangi bir şans @ mmckinst cevap zsh içinde çalışır? ya da onun gibi bir şey? ya da belki komutu içeren herhangi bir komut| somecommand
xenoterracide

AFAIK, zsh'da bash HISTIGNORE ile eşdeğer değildir.
dogbane

@ xeno zsh, bunun preexeciçin kullanılabilecek bir kanca işlevi sağlar . Sıfır olmayan bir değer döndürürse, komut geçmişe kaydedilmez.
Keith

1
zsh'nin bir sürü temel ortak komutu görmezden gelmesini sağlamak için, hepsinin önünde boşluk bırakacak şekilde adlandırdım ... c (ls fg bg işleri net bir şekilde sıfırlandı); takma ad $ c = "$ c"; bitmiş
olacak Norris

4
Benim gibi tembel gelecek okuyucuları için henüz nasıl yapılacağını bilmeyen okuyucular için: setopt HIST_IGNORE_SPACEin~/.zshrc
Al.G.

25

Komutu tekrar tekrar çalıştırıyorsanız, kabuğunuzun geçmişini yoksay özelliğini kullanmak isteyebilirsiniz. Diyelim ki, ssh yaptığınız secret.server.com adresiniz, FTP dosyalarınız vb.

Gelen bashsen kuracak

HISTIGNORE="*secret.server.com*"

oysa zshparametrede denir

HISTORY_IGNORE="*secret.server.com*"

Birden fazla deseni, onları ayıran iki nokta ile listeleyebilirsiniz. Her desenin tam giriş çizgisiyle eşleştiğini unutmayın , bu nedenle bir * eklemeniz gerekebilir. Örneğin, aşağıdakiler fortunegeçmişin dışında kalır, ancak depolar fortune -l:

HISTIGNORE="*secret.server.com*:ytalk*:fortune"
HISTORY_IGNORE="*secret.server.com*:ytalk*:fortune"

HISTIGNORE ayarında, listelediğiniz kalıplarla eşleşen hiçbir şey .bash_history/ .zsh_historyveya normalde önceki komutunuzu hatırlatan yukarı ok tuşuna bile kaydedilmez , kalıpla uyuşuyorsa çalışmaz.


3
Bu zsh içinde çalışma şansı var mı?
xenoterracide 19:11

Sadece servet ile başlayan satırları yoksaymak için bir seçenek var mı. Görmezden HISTIGNORE="^fortune*"gelmek, fortune -lsaklamak gibi bir şey myfortune?
Bernhard

@ xenoterracide O yapar, ancak parametre farklı adlandırılmıştır. Sadece cevabı değiştirdim.
n.st

23

Bash'ta HISTCONTROLdeğişkeni kullanın .

HISTCONTROL=ignorespace(Veya HISTCONTROL=ignoreboth) olarak ayarlayın . Ne zaman andan itibaren, bir boşlukla bir çizgi başlayacak , bu olacak değil geçmişinde kaydedilecek. Bu, bazı yapılandırma dosyalarına açıklanmaması gereken komutu dahil etmekten kaçınır.

Öyle bile olsa, alanı eklemeyi unutmak ve sonra geri dönmek istiyorum olur. Tarih, kullanımda bir girişi silmek için history -d <index>birlikte indexbulunabilir sayıda historykomutu (ilk sütun).


1
Bu işe yarıyor zshmu?
Gert

11

Bir kerelik için en kolay yol

$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$

burada $ilk kabuğun $$istemini temsil eder ve alt kabuğun istemini temsil eder. Bu bash ve zsh olarak çalışır; Ksh HISTFILE=/notwritableyerine gerek . Önemli olan HISTFILE, komutun çalıştırılmadığı zaman, tarih dosyasının yazıldığı zamanın değeridir . Bash, ksh ve zsh çıktıklarında geçmiş dosyasına yazarlar (zsh yapılandırmaya bağlı olarak daha sık yapabilir).

Alternatif olarak, belirli desenlerle eşleşen çizgileri yoksaymak için bash veya zsh alabilirsiniz (bu, zaten başka cevaplar tarafından kapsanmaktadır).

Zsh'daki bir başka olasılık da

% fc -p
% secret-command
% fc -P

fc -pGeçerli geçmiş listesini bir yığına iter ve kaydetme dosyasıyla ilişkili olmayan yenisini başlatır. fc -Pkaydedilmemiş tarihin yığında listelediğini ve tamamen unutulduğunu gösterir.

Bir işlem çalışırken, komut ve argümanları (ve bazı sistemlerde ortamı da) işlem tablosunda ( psçıktı) görünecektir . Kök sistem muhasebe veritabanındaki geçmiş komutları görebilir ve kontrolünüz olmadan daha fazla günlük kaydı yapabilir. Muhtemelen hangi komutu çalıştırdığınızı (örneğin dosya değiştirme zamanları gibi) gösterebilecek her türlü adli kanıt olacaktır. Böylece, belirli dinleyicilere karşı gizlilik elde edemezsiniz.

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.