Bir girişi yeniden kullandığımda ve değiştirdiğimde bash'ın geçmişini düzenlemeyi nasıl durdurabilirim?


20

Bazı bash örnekleri, önceki bir komutu yeniden kullandığınızda ve düzenlediğinizde komut geçmişini değiştirir, diğerleri görünüşte değişmez. Arama yapıyordum ve aradım ancak geçmişteki komutların yeniden kullanıldıklarında ve düzenlendiklerinde değiştirilmelerinin nasıl önleneceğini söyleyen hiçbir şey bulamıyorum.

Orada gibi sorular bu bir , ama bu tarih düzenlenmekte olan ile başa çıkmak için nasıl söylemek gibi görünüyor. Son zamanlarda bir komutu yeniden kullandığınızda geçmişi düzenleyen bir bash örneğiyle karşılaştım - kullandığım önceki tüm bash kabukları (fark ettiğim kadarıyla) yeniden kullandığınızda geçmişi değiştirmek için yapılandırılmamış ve bir komutu düzenleyin. (Belki de son 15 yıldır kabuk geçmişime yeterince dikkat etmiyordum ...)

Bu muhtemelen en iyi soru: bash'a ASLA geçmişi değiştirmesini söyleyemem - eğer öyleyse, nasıl?


history -pGeçmiş dosyasını etkilemeden geçmiş genişletmeleri yapmak için kullanabilirsiniz . Sen yapabilirsin history -saynı ve yürütme olmadan tarihine ekleme yapmak. HISTIGNORE='start of a command I never want in history.*:command2.*'Belirli komutları geçmişin dışında tutmak için yapabilirsiniz .
mikeserv

1
Bağladığınız set revert-all-at-newline onsorudaki sorununuzu çözmüyor mu? Sorunun nasıl yeniden üretileceğini gösterebilir misiniz? İstediğinizle zshdaha satır içi bir davranış için de kullanabileceğinizi unutmayın .
Stéphane Chazelas

@mikeserv Man sayfasına baktığımda, history -pyeniden kullanmak istediğim her komut için yapmam gereken bir şey var - doğru mu? Eğer öyleyse, aradığım şey tam olarak bu değil. Bahsettiğim gibi, bir komut yeniden kullanıldığında ve düzenlendiğinde geçmişi değiştirmeyen bash örneklerini kullandım.
Richard Wiseman

@ StéphaneChazelas Hayır, revert-all-at-newlinetam olarak ihtiyacım olan şey sanmıyorum . Bir komutu düzenler ve iptal etmek için CTRL-C tuşlarına basarsam, bunun geçmişi etkilemesini de istemiyorum. Daha önce yapılandırmak bash zorunda kalmamıştım değil ben taze bir diğerinde bazen bir şekilde davranır yüklemek ve neden bazen şekilde karıştı nedenlerinden biri de bu kadar değiştirmek geçmişi. Bu arada, komutun yeniden kullanılmasına ilişkin geçmişi düzenlemeyen bir örnekte, 'kapalı' olarak ayarlanmış bir bind -V | grep revertişaret revert-all-at-newline.
Richard Wiseman

2
Aslında bunun çok az ilgisi var bash. Her şey readline ile ilgili. readlineKütüphanenin farklı uygulamaları vardır ve ayrıca kendi ayarları (bir sürü) ve kendi yapılandırma dosyası vardır. Bunun bir ayar mı yoksa basitçe bir uygulama farkı mı olduğundan emin değilim, ancak bash yerine readline ile ilgili dokümanlarda arama yapmalısınız.
orion

Yanıtlar:


9

Çıkıyor revert-all-at-newlinecevaptır. Ben dahil etmek gerekli set revert-all-at-newline onbenim de ~/.inputrckullanarak bu yana, dosyanın setbash isteminde hiçbir etkisi komutu almıştı. (Sonra, elbette, yeni bir mermi başlatmak zorunda kaldım.)

Ayrıca, eğer varsa, bunun yerine~/.inputrc yüklendiğini buldum . Bunu düzeltmek için ile başlayın . /etc/inputrc~/.inputrc~/.inputrc$include /etc/inputrc

Beni doğru yöne yönlendirdiği için @ StéphaneChazelas'a teşekkürler.


0

~ / .Bashrc içine

shopt -s histappend

Teşekkürler, ancak yaşadığım sorun üzerinde hiçbir etkisi yoktur. Az önce kontrol ettim ve histappendaçık ama geçmişim hala önceki komutların düzenlemelerini gösteriyor.
Richard Wiseman

Bash man sayfasını araştırdım ve düzenleme geçmişi için kurallar buldum Readline Komut Adları Oldukça açıklayıcı ama belki dışında ne istediğiniz için bir seçenek göremiyorum: redraw-current-line hat.
Jeff Coleman

Ayrıca varsayılan olarak kapalı olan yeni bir satır içi seçeneği de vardır
Jeff Coleman
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.