Verhindert, dass Fenster / Fenster geschlossen werden, wenn der Befehl ausgeführt wird - tmux

33

In meiner tmux.confDatei habe ich es so konfiguriert, dass es Fenster öffnet, benennt, Fenster einrichtet usw. usw.

Ein Problem, das ich habe, ist jedoch, dass, wenn einer der Bereiche einen Befehl startet ls, der Bereich sich selbst schließt, nachdem der Befehl ausgeführt wurde (sofort). Gibt es eine Möglichkeit, dieses Verhalten zu verhindern? Oder haben Sie es auf eine normale Shell fallen, nachdem ein Befehl abgeschlossen ist?

Ich gehe davon aus, dass ich eine Shell starten muss -> Befehl ausführen, wenn der Bereich gestartet wird, aber ich werde verdammt sein, wenn ich herausfinden kann, wie. Ich habe ein bisschen nach diesem Problem gegoogelt, bin aber zu kurz gekommen.

Eintopf
quelle

Antworten:

22

Sie haben mehrere Möglichkeiten.

  1. Anstatt lsin Ihrem Fenster zu laufen, führen Sie eine Shell aus und senden Sie dann die Shell-Tastenanschläge, um Folgendes auszuführen:

    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. Sie können eine Folge von Befehlen so zu Mittag essen, dass Sie eine Bash-Shell haben, nachdem Ihre anderen Befehle ausgeführt wurden:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'ls;bash -i'
    
  3. Siehe jasonwryan Antwort Einzelheiten über die remain-on-exitOption zu halten Scheiben am Leben nach dem Prozess beendet wird , so dass Sie die Ausgabe überprüfen können.

  4. Wenn die Ausgabe eines Befehls einmal zu sehen war, ist sie möglicherweise eine Aktualisierung wert. Wenn Sie die Ausgabe von etwas überwachen, können Sie watchregelmäßig neue Ausgaben abrufen. Dies sollte gut mit Fenstern in spielen tmux:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'watch -n 60 ls'
    
Caleb
quelle
Danke, Mann! Fantastische Antwort, Nummer 2 und Nummer 4 sind genau das, wofür ich gearbeitet habe, aber Nummer 1 scheint auch eine großartige Alternative zu sein. Vielen Dank für die Hilfe, es ist sehr dankbar (ihr beide).
Eintopf
1
Der Vorteil von # 1 ist, dass der Befehl im Shell-Verlauf verbleibt und einfach erneut ausgeführt werden kann. Wenn der Befehl groß und hässlich war, ist dies sehr hilfreich.
Goertzenator
1
Es funktioniert für mich ohne den start-serverBefehl, ich denke, es wird bei Bedarf automatisch gestartet. Gibt es einen Vorteil, es trotzdem explizit zu nennen?
Luator
1
@luator Ich denke, ein Server wird automatisch gestartet, wenn keiner gefunden wird. Möglicherweise wurde er hinzugefügt, tmuxseit ich diese Antwort geschrieben habe. Ich kenne keinen Vorteil, wenn Ihre Version bei Bedarf einen Serverprozess erzeugt.
Caleb
13

Sie könnten die remain-on-exitOption verwenden:

beim Verlassen bleiben [ein | off]
Ein Fenster mit diesem Flag wird beim Beenden des darin laufenden Programms nicht zerstört. Das Fenster kann mit dem Befehl respawn-window wieder aktiviert werden.

Um den Respawn-Vorgang zu vereinfachen, möchten Sie ihn möglicherweise an einen Schlüssel binden:

bind-key R respawn-window

So stellen Sie sicher, dass Sie beim Beenden der Programme keine toten Fenster mehr haben.

jasonwryan
quelle
Ich bin dort angekommen! Ich hatte keine Zeit mehr und musste meine Antwort ändern. Ja, dies ist die dritte Option. Der Hauptnachteil besteht darin, dass ein schreibgeschütztes Fenster verbleibt, das Sie ohne Neuerstellung nicht wiederverwenden können.
Caleb
Guter Punkt. Ich habe mit einer (Halb-) Problemumgehung aktualisiert.
Jasonwryan
Funktioniert das mit Scheiben?
Azmeuk
1
Die Einstellung über die Befehlszeile kann mittmux set-option remain-on-exit on
rmanna
1
@azmeukset-option -g remain-on-exit on bind-key r respawn-pane
HappyFace
1

Hier ist ein erweitertes Beispiel mit der send-keysvon @Caleb empfohlenen Methode

#!/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
jtpereyda
quelle