Bash geçmişi değişikliğini geri almanın bir yolu var mı?


9

Yukarı basarak, daha önce girilmiş komutlardan geçebilirim. Yine de, eğer bunlardan birini değiştirirsem, tarihin değiştiğini fark ettim. Örneğin, şunu yazarsam:

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

tarih artık ikinci komutun echo dolmadığını gösteriyor , değil echo b. echo bTarihte ilkini nasıl saklayabilirim?

Örneğin, birçok seçenekle gerçekten uzun bir komut çalıştırdığımı varsayalım. küçük bir değişiklikle tekrar çalıştırmak istiyorum, bu yüzden onu bulmak, değiştirmek için geçmişe geri dönüyorum, ama sonra aslında başka bir seçeneği düşünerek yeniden çalıştırmam gerekmediğini fark ettim yerine. sonra geri dönüp kendime koştuğum komutun ne olduğunu hatırlatmak istiyorum - ama bekle, tarih şimdi yanlış şeyi gösteriyor!

Bu çok nadiren ortaya çıkıyor, ancak bunu yaparken gerçekten rahatsız edici buluyorum. Orijinal geçmişi otomatik olarak korumanın bir yolu var mı?


1
ile historyhepinize komutunu görebilirsiniz. İhtiyacınız olanı seçtikten sonra. Şimdi hangi kabuğu kullanıyorsun?
Hastur

6
Bunu yeniden üretemem. C'yi d olarak değiştirirsem, CTRL + C tuşlarına basın ve tekrar [yukarı] tuşuna basın, yine de diyor echo c.
Martin von Wittich

Yanıtlar:


6

İçine koymak için deneyin ~/.inputrc

 set revert-all-at-newline on

Bazı durumlarda varsayılan değerde (Kapalı) bulabilirsiniz. Yürütüldüğünde dönmeden önce geçmiş satırlarındaki tüm değişiklikleri geri almaya
zorlamalıdır . (daha fazla bilgi için ).readlineaccept-lineman bash

Düzenleme:
CTRL+c ve set revert-all-at-newline ono zamandan beri iyi çalışıyor bash-4.3.30.

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

Fakat:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d

Güzel, bu daha iyi bir çözüm. İlginç bir şekilde, CTRL-c aslında değiştirilen değeri hatırlamasına neden olur, ancak satırı tamamen siler veya aşağı oklar ve sonra enter tuşuna basmak veya başka bir komutu çalıştırmak geçmişi geri yükler.
Dean Serenevy

@DeanSerenevy: Teşekkürler Geçici çözümünüzü de beğendim ve CTRL-a'yı da kullanmaya başladım nano:-)
Hastur

4

Genelde:

CTRL-a # ENTER

yapacağım.

Değiştirilen komutu yürütürseniz orijinal komut hatırlanır. Tabii ki, aslında yürütmek istemezsiniz, böylece hattı yorumlayabilirsiniz #.

Örnekte, daha sonra tarihinin olurdu: echo a, echo b, echo c, # echo d.


1
alt-shift-3Bash'iniz kullanılıyorsa geçerli komut satırını yorumlamak için tuşuna basabilirsiniz readline. /insert-commentiçinde man 3 readline(veya man bashbilgi daha için).
cychoi
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.