Tarihçe dosyaları bash'ta birleştirilebilir mi?


35

screenLinux masaüstlerimde ve sunucularımda birden fazla oturumu düzenli olarak çalıştırıyorum .

Bununla ilgili bir sorun, grepkomut geçmişimden geçtiğimde, farklı bir oturumda bir komut verdiğimi ve bu tarihçeyi almak için ayırıp yeniden takmam gerektiğini bulmam.

Farklı güncellenen tarihçelerin birden fazla seanstan merkezi bir tarihe geçmesi için 'zorlanması' mümkün mü?


Terminal oturumları arasındaki tarihi göremediğim için benzer bir sorunla karşılaştım. Benim ~ / .bash_history dosya benim kök aitti ve yazılabilir değil. Sahibini / grubunu kullanıcıma değiştirmek sorunu çözdü: sudo chown <user>: <group> ~ / .bash_history
mateo

Yanıtlar:


41

Yapmanız gereken iki şey var:

  1. Komutu shopt -s histappendiçine yerleştirin .bashrc. Bu, üzerine yazmak yerine geçmişe eklenir.
  2. Ayrıca .bashrc, insert'inizde PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"tarihçe dosyası yeniden yazılacak ve bash komut istemini her gösterdiğinde yeniden okunacaktır.

DÜZENLEME: e-t172 sayesinde history -nhile


6
Bunun için teşekkürler. PROMPT_COMMAND = "$ PROMPT_COMMAND; history -a; history -n" kullanarak daha da geliştirdim. Bu şekilde, diğer oturumlarda verilen komutlar geçerli oturumun tarihinde hemen görünür (öyleyse, geçmişi güncellemek için önce Enter tuşuna basmanız gerekir).
Etienne Dechamps,

8
Daha PROMPT_COMMANDönce tanımlamamıştım, bu yüzden PROMPT_COMMAND="history -a; history -n"hataları önlemek için kullanmak zorunda kaldım .
William Jackson

1
lütfen doğru kullanıcı -a, -c ve -r komutları için superuser.com/a/734410/250287 yanıtına bakın .
mtd

Yeni gelenlere bir uyarı: bir süre tarih yazmayı kullandıktan sonra, genellikle yanlış komutları verdiğimi fark ettim; önceki satırda bazı komutları gördüğünüzde, yukarı okun tekrar etmesini beklersiniz ve bu yapılandırma ile artık her zaman böyle olmaz.
Tiago

10

Lütfen kullanmayın history -a; history -n, beklediğiniz gibi çalışmaz ve sizi tarihinizde sıra dışı komutlarla çoğaltırsınız. Genellikle beklendiği gibi çalışan bir çözüm aşağıdaki gibidir:

# unified bash history
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

Noktalı virgül yerine newline kullanmak, PROMPT_COMMAND ile eksik / yinelenmiş noktalı virgül sorunuyla ilgilenmenin kısa bir yoludur.


tarihçe -a, -c, ve sonra -r doğrudur ... bu kabul edilen cevap olmalıdır
mtd

1
exportGerekli değildir. ~/.bashrcHer bir alt kabuktan çağrılacak etkileşimli kabuk seçeneklerinin ayarlandığı varsayıldığından , devralma gerekli değildir.
dolmen

PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"Bunun yerine sadece kullanmamak için iyi bir neden var mı ?
Altı

Bu sıralamanın, tarih komutlarını çalıştırmadan önce son çıkış değerini kaydetmesi gerekir, çünkü birçok komut istemi buna dayanır ya da gösterir.
Adam Crane,

-1

PROMPT_COMMAND bazı dağıtımlarda varsayılan olarak tanımlanmamıştır. Örneğin, Arch'ta tanımlanır, ancak Debian'da tanımlanmaz.

Dropbox'ımda dağıtma işlemi sırasında kullandığım bir bashrc var ve şunları içeriyor:

PROMPT_COMMAND="$( [ '$PROMPT_COMMAND' ] && echo $PROMPT_COMMAND; )history -a; history -n"

Temel bir kabuk programlama problemine korkunç bir çözüm. Doğru yol:PROMPT_COMMAND="$PROMPT_COMMAND; history -a; history -n"
dolmen

Daha iyi:PROMPT_COMMAND="$PROMPT_COMMAND"$'\n''history -a; history -n'
dolmen
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.