Wie wechsele ich zu einer Shell, nachdem ich einen Befehl beendet habe, den ich durch das Ausführen eines Skripts von tmux gestartet habe?

Wie wechsele ich zu einer Shell, nachdem ich einen Befehl beendet habe, den ich durch das Ausführen eines Skripts von tmux gestartet habe?

Ich folgedieses Tutorialzum Skripten der Erstellung von Tmux-Fenstern.

tmux new-window t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp'

manchmal beende ich myapp, nachdem ich tmux gestartet habe. Ich möchte zu einer Shell in diesem Verzeichnis zurückkehren, aber stattdessen wird das Fenster vollständig beendet. Wie kann ich das am besten beheben? Ich denke, mindestens eine Antwort besteht darin, eine Shell auszuführen und diese Shell Befehle ausführen zu lassen, aber ich bin mir nicht sicher, wie ich das am besten erreichen kann.

Antwort1

tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp; $SHELL'

startet Ihre Standard-Shell, wenn die vorherigen Befehle beendet wurden (unabhängig von ihrem Rückgabewert, d. h. auch, wenn Sie sie nicht beendet haben).

Wenn Sie nur dann zur Shell wechseln möchten, wenn der perlProzess beendet wurde oder fehlgeschlagen ist (und das tmux-Fenster schließen möchten, wenn der Prozess erfolgreich war), verwenden Sie

tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp || $SHELL'

Antwort2

tmuxöffnet bereits eine Shell für Sie, in der die Befehle cdund ausgeführt werden perl. Wenn Sie nicht ausführen möchtenein andererShell darunter, nur um eine interaktive Sitzung fortzusetzen (oder das Schließen des Fensters zu verhindern, ohne zu verwenden set-remain-on-exit), können Sie Folgendes tun:

tmux new-window -t $SESSION:0 -k -n MAIN
tmux send-keys 'cd ~/main/ && perl -Ilib myapp' C-m

Wenn Sie eine weitere Shell unter der tmuxerstellten Shell möchten und möchten, dass diese Shell die Befehle ausführt und interaktiv wird (was sich von der @n.st-Antwort unterscheidet, bei der die Shell anschließend ausgeführt wird), können Sie Folgendes tun:

tmux new-window -t $SESSION:0 -k -n MAIN 'bash --init-file <(echo "cd ~/main/ && perl -Ilib myapp")'

und wenn das Problem darin besteht, dass bashdie Umgebung unvollständig ist, gehen Sie wie folgt vor:

tmux new-window -t $SESSION:0 -k -n MAIN 'bash --init-file <(echo "source ~/.bashrc; cd ~/main/ && perl -Ilib myapp")'

verwandte Informationen