Komut tamamlandığında bölmenin / pencerenin kapanmasını önle - tmux


33

Benim içinde tmux.confdosyanın ben onlara isim, açık pencereler için yapılandırılmış olması, kurulum bölmeleri vb .. vs ..

Ancak sahip olduğum bir konu, bölmelerden birinin komut çıkarması durumunda, diyelim ki ls , komut tamamlandıktan sonra bölmenin kendisini kapatması (derhal). Bu davranışı önlemenin bir yolu var mı? Veya bir komut tamamlandıktan sonra normal bir kabuğa mı düşüyor?

Bölme başladığında bir kabuk -> execute komutu başlatmam gerektiğini düşünüyorum, ama nasıl yapılacağını öğrenirsem lanetleneceğim. Bu sorun için biraz googledim ama kısa sürdüm.

Yanıtlar:


22

Birkaç seçeneğin var.

  1. lsPencerenizde çalıştırmak yerine, bir kabuk çalıştırın, ardından çalıştırılacak kabuk tuş vuruşlarını gönderin:

    tmux start-server  
    tmux new-session -d -s session  
    tmux new-window -t session:1  
    tmux send-keys -t session:1 ls C-m
    
  2. Diğer komutlarınızı çalıştırdıktan sonra kendinizi bir bash kabuğuyla bırakacak şekilde bir dizi komuttan öğle yemeğinde yiyebilirsiniz:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'ls;bash -i'
    
  3. Çıktısını gözden geçirebilmeniz için remain-on-exitbölmeleri işlemlerinden sonra hayatta tutma seçeneği hakkındaki ayrıntılar için jasonwryan'ın cevabına bakınız .

  4. Bazı komutların çıktısı bir kez görülmeye değerse, yenilenmeye değer olabilir. Bir şeyin çıktısını watchizliyorsanız periyodik olarak yeni çıktılar elde edebilirsiniz . Bu bölmelerde güzelce oynamalıdır tmux:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'watch -n 60 ls'
    

Teşekkürler dostum! Müthiş cevap, 2 numara ve 4 numara tam olarak çalıştığım şeydi ama 1 numara da harika bir alternatif gibi görünüyor. Tüm yardımlarınız için teşekkürler, gerçekten minnettarım (ikiniz de).
Yahn

1
# 1'in avantajı, komutun kabuk geçmişinde kalması ve kolayca yeniden çalıştırılabilmesidir. Eğer komut büyük ve çirkin ise, o zaman bu çok yardımcı olur.
goertzenator

1
Bu start-serverkomut olmadan benim için çalışıyor , gerektiğinde otomatik olarak başlatıldığını düşünüyorum. Yine de açıkça söylemenin bir avantajı var mı?
luator

1
@luator tmuxBu cevabı yazdığımdan beri hiçbir sunucu eklenmediyse bir sunucuyu otomatik olarak başlatmayı düşünüyorum . Gerekirse, sürümünüz bir sunucu işlemi oluşturuyorsa, hiçbir avantaj bilmiyorum.
Caleb

13

Bu remain-on-exitseçeneği kullanabilirsiniz :

çıkışta kalmaya devam [açık | off]
Bu bayrak setinin bulunduğu bir pencere, içinde çalışan program çıktığında yok olmaz. Pencere respawn-window komutu ile yeniden etkinleştirilebilir.

Yeniden doğma işlemini basitleştirmek için, bir anahtara bağlamak isteyebilirsiniz:

bind-key R respawn-window

Bu, programlar çıkarken ölü pencerelerle bırakılmamanızı sağlayacaktır.


Oraya gidiyordum! Zamanım tükendi ve cevabımı düzenlemeye karar verdim. Evet, bu üçüncü seçenek, ana dezavantaj, yeniden oluşturmadan kullanamayacağınız salt okunur bir pencere bırakmasıdır.
Caleb,

İyi bir nokta. (Yarı) bir geçici çözüm ile güncelleştirdim.
jasonwryan

Bölmeleri ile çalışır mı?
azmeuk

1
Bunu komut satırından ayarlamaktmux set-option remain-on-exit on
rmanna

1
@azmeukset-option -g remain-on-exit on bind-key r respawn-pane
HappyFace

1

send-keys@Caleb tarafından önerilen yöntemi kullanarak genişletilmiş bir örnek

#!/bin/sh
tmux start-server
tmux new-session -d -n 'mywindowname'
tmux send-keys -t mywindowname 'cd notes' Enter 'vim whiteboard/tasks.md' Enter
tmux new-window -d -n 'secondwindowname' # this -d prevents focus from changing to the new window
tmux -2 attach-session -d
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.