Yaratıcı ve ilgili sinyalleri mi söylüyorsunuz? TAMAM:
trap on_exit EXIT
trap on_usr1 USR1
on_exit() {
history -a
trap '' USR1
killall -u "$USER" -USR1 bash
}
on_usr1() {
history -n
}
İçine çek .bashrc
ve git. Bu, sinyallere her bash
işlemden başka bir çıkış olduğunda yeni geçmiş girişlerini kontrol etmesini bildirmek için kullanır . Bu oldukça korkunç, ama gerçekten işe yarıyor.
O nasıl çalışır?
trap
bir sistem sinyali veya Bash'ın dahili olaylarından biri için bir sinyal işleyici ayarlar . EXIT
İse olay, kabuğun herhangi kontrollü fesih olduğunu USR1
ise SIGUSR1
, biz mülk ediyoruz anlamsız bir sinyali.
Mermi her çıktığında:
- Tüm geçmişi dosyaya açıkça ekleyin.
SIGUSR1
İşleyiciyi devre dışı bırakın ve bu kabuğun sinyali yok saymasını sağlayın .
- Sinyali
bash
aynı kullanıcıdan gelen tüm çalışan işlemlere gönderin .
Geldiğinde SIGUSR1
, biz:
- Geçmiş dosyasındaki tüm yeni girdileri kabuğun bellek içi geçmiş listesine yükleyin.
Eğer çarpana kadar biçimi nedeniyle Bash kolları sinyallerin, aslında yeni geçmiş verileri almazsınız Enterdahaki sefere bu koyarak daha iyi bu cephede yapmaz, bu yüzden history -n
içine PROMPT_COMMAND
. Yine de hiçbir şey olmadığı zaman dosyayı okumaktan tasarruf eder ve kabuk çıkana kadar hiçbir yazı yoktur.
Bununla birlikte, burada hala birkaç sorun var. Birincisi , varsayılan yanıtıSIGUSR1
kabuğun sonlandırılmasıdır . Diğer tüm bash
işlemler (örneğin, kabuk komut dosyalarını çalıştırma) öldürülecektir. .bashrc
etkileşimli olmayan mermiler tarafından yüklenmez. Bunun yerine, adlı bir dosya BASH_ENV
yüklenir : ortamınızdaki bu değişkeni global olarak aşağıdakileri içeren bir dosyaya işaret edecek şekilde ayarlayabilirsiniz:
trap '' USR1
içindeki sinyali görmezden gelmek için (sorunu çözer).
Son olarak, bu ne istediğini yapsa da, aldığınız sipariş biraz olağandışı olacaktır. Özellikle, tarih bitleri ayrı yüklendikçe ve kaydedildikçe farklı siparişlerde tekrarlanacaktır. Bu aslında ne istediğinin doğasında var, ancak yukarı ok tarihinin bu noktada çok daha az kullanışlı hale geldiğini unutmayın. Bununla birlikte, tarih ikameleri ve benzerleri paylaşılacak ve iyi çalışacaktır.