
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 perl
Prozess 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 cd
und 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 tmux
erstellten 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 bash
die 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")'