Bash kabuğu işlemlerini uzaktan sonlandırmak ancak geçmişin kaydedilmesini sağlamak nasıl?


0

Zaman zaman X11 pencere yöneticim (i3) kilitleniyor ve kontrolü yeniden kazanmak için Linux sanal konsoluna veya SSH'yi makineme dönüştürmek zorunda kalıyorum.

Genellikle bu, birçok gün veya hafta boyunca toplanan yüzlerce satırlık komut satırı geçmişinin olmasa da onlarca içeren bir bash kabuğu çalıştıran çok sayıda rxvt pencerem açık olduğunda olur.

Ben kullanıyorum shopt -s histappendo düzenli bir şekilde sonlandırıldığında böylece her Bash kabuk geçmiş dosyasına tarihini ekler. Normalde bu çok iyi çalışır ve her kabuğu temiz bir şekilde exitveya CTRL-D ile kapatmam şartıyla tüm tarihimi koruyacaktır .

Ancak pencere yöneticim kilitlendiğinde, bash oturumlarımdan temiz bir şekilde çıkamıyorum çünkü onlarla etkileşime girmenin yolu yok. Bu yüzden _remotely_ bir bash kabuğunu, geçmişini tarih dosyasına yazmasına neden olacak şekilde sonlandırmanın bir yolunu bulmaya çalışıyorum.

SIGHUPHem bash shell işlemine hem de rxvt işlemine de dahil olmak üzere çok sayıda sinyal göndermeyi denedim , ancak hiçbiri tarihin kurtarılmasına neden olmadı.

İ3'ü yeniden başlatmaya çalıştım, ancak çeşitli nedenlerden dolayı bu çalışmıyor (bozuk RPC soketi görünüyor). Pencere yöneticisini öldürmek tüm pencereleri ve bash mermilerini kapatıyor ve ben hepsinden geçmişi kaybediyorum.

Her bir kabuğa "CTRL-D" enjekte etmenin bir yolunu bulmaya çalıştım stdin, ancak söyleyebildiğim kadarıyla mümkün değil.

Bash’ın her komuttan sonra geçmişi dosyaya kaydetmesini sağlamanın yollarını biliyorum, ancak bunları tarih indekslerini karıştırdıkları için kullanmamayı tercih ediyorum (yani her komuttan sonra değiştiği için !nnnçalışmıyor nnn).

Bunu yapmanın ve kıymetli tarihimi belirli bir kayıtsızlıktan kurtarmanın bir yolu var mı?

Yanıtlar:


1

Kullanın reptyr.

reptyr mevcut bir çalışan programı almak ve yeni bir terminale eklemek için bir yardımcı programdır.

Ayrıntılar için bu cevaba bakınız. İstediğiniz kabuk işlemini mevcut terminalinize taktıktan sonra, bunu exitincelikle söyleyebilirsiniz .

Şu anda eklemek istediğiniz belirli kabuk işlemini tanımlamak kolay olmayabilir. Muhtemelen kullanacağı reptyrüzerinde herhangi kabuk tarafından bulunan sürecinin psardından önceki komutları kontrol edecek ve ancak o zaman istenilen seans var olup olmadığını bilecek, (ya da benzeri bir araç).

Daha uygun bir çözüm yolu kullanmak tmuxya screenda ilk sırada kullanmaktır.

Birlikte çalıştığım tmuxgünlük bazda ve tty2 dan yeniden bağlanması için önemsiz bir görev. Bu araç ile "çok sayıda rxvt penceresini aç" seçeneğine ihtiyacım yok. Genelde çalışmamı böyle düzenlerim:

  1. Tek bir konsolepencere
  2. Her makine için bir sekme (doğrudan yerel ana bilgisayar, artı ben sshbirkaç uzaktakilere) tmux.
  3. Her tmuxpencerede veya daha fazlasında (gerektiği gibi).
  4. Her pencerenin içinde bir veya daha fazla bölme (gerektiğinde).

Bu "katmanlar", aşağıdaki ekran görüntüsünde karşılık gelen kırmızı sayılarla işaretlenmiştir. X11 veya KDE sorunları , verilen makinenin herhangi bir konsoluna ulaşabildiğim sürece kabuk oturumlarımı etkilemiyor . tmuxSunucunun yalnızca bir çöküşü zarar görebilir, ancak böyle bir şeyin başıma geldiği son zamanı hatırlayamıyorum (muhtemelen asla).

"Kontrolümü yeniden kazanmak için Linux sanal konsoluna veya SSH'ye makinemde geçiş yapmak zorunda kalmam durumunda", tek ihtiyacım olan şey tmux ave sanki hiçbir şey olmamış gibi kabuk oturumlarımı tamamen işlevsel hale getirdim. Ben sonra tekrar doldurmak için benim pencere yöneticisini zorlayabilir Eğer yeni bir geri onlara alabilirsiniz çünkü ben bile, bu kabuk işlemleri sonlandırmak gerekmez konsole, rxvtya da herhangi bir terminal emülatörü.

ekran görüntüsü


Bu bilgi için çok teşekkür ederim. reptyrtam ihtiyacım olan şey. Her screenzaman kullanırdım ama kopyala / yapıştır ve kaydırma davranışını show-stoper olarak buldum - tmuxbu cephede daha iyi bir iş yapıyor mu?
davidA

Bu arada, tmuxzaten kullanıyor olsaydım bash oturumlarımı kurtarmaya alışmış olmama rağmen, i3'ü kapattığımda tüm makinem çöktü (muhtemelen bir video sürücüsü sorunu), bu yüzden bu yapmasaydım ideal olmazdı her
mermiye

@meowsqueak Açıkçası Daha tmuxiyi bir iş yapıp yapmadığını bilmiyorum . Tecrübem screenyok, kıyaslama yapmıyorum; ve hiçbir zaman kopyalamam gerekmiyor tmux.
Kamil Maciorowski
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.