Kiedy więc otwieram nowy terminal (używam terminatora w Arch Linux), skonfigurowałem go tak, aby albo otwierał nową tmux
sesję, jeśli nie istnieje, albo dołączał do istniejącej. Kiedy piszę exit
w wierszu polecenia, kończy sesję tmux. Muszę wpisać exit
ponownie, aby zamknąć terminal. Chcę, żeby exit
po wpisaniu raz zamknął terminal, ale przestał tmux
działać, więc następnym razem, gdy otworzę terminal, połączy się on z poprzednią tmux
sesją. Zasadniczo jest to odpowiednik kliknięcia przycisku wyjścia w menedżerze okien, ale chcę tę funkcję podczas pisania exit
.
EDYTOWAĆ:
To jest coś, co chcę:
alias exit='if [[ $TMUX = "" ]]; then exit; else tmux detach; exit; fi'
ale problem polega na exit
tym, że tmux detach
powinien zostać wywołany w terminalu zawierającym sesję tmux, a nie sama sesja tmux.
exit
nie jesttmux
rozkazem; to polecenie powłoki.tmux
kończy działanie tylko wtedy, gdy zakończysz polecenie (zwykle powłokę) w ostatnim panelu ostatniego okna. Wygląda na to, że chcesz po prostu odłączyć się od bieżącej sesji, w takim przypadku powinieneś użyć odpowiedniegotmux
polecenia lub powiązania klawiszy.exit
to nie jest polecenie tmux. Chcę się odłączyć od sesji i wyjść z terminala (nie sesji), ale chcęexit
to zrobić w sesji Tmux. Myślę, że powinno to być możliwe z odrobiną bash-fu.exit
aby nie wychodzić z powłoki. W każdym razie, jak długo trzebatmux
będzie rzeczywista komenda, która biegnie terminali (w przeciwieństwie do zaczynająctmux
jako dziecko powłoki rozpoczętej przez terminal), odłączenie spowoduje ostatni program działa w powłoce, aby wyjść i, zakładając, że terminal jest skonfigurowany do tego, automatycznie zamknij okno.Odpowiedzi:
Musimy zadeklarować dwie funkcje: jedna uruchamia tmux, a druga kończy tmux:
Wykona się to albo (tmux attach lub tmux), jeśli proces tmux istniał, czy nie, po zakończeniu używania tmux zostanie wykonane wbudowane wyjście, aby zamknąć terminal (jeśli nie ma zagnieżdżonej powłoki).
Jeśli w Tmuxie go odłączysz, jeśli nie, uruchomisz wbudowane wyjście
Umieść je w swoim .bashrc lub .zshrc i zmień nazwę funkcji, jeśli chcesz, i wywołaj je.
źródło
to uruchomi terminator z uruchomionym tmux zamiast powłoki. jeśli proces tmux zakończy się, terminator zostanie zamknięty zaraz po.
źródło
exit
nadal zabija ostatni terminal i kończy działanie tmux, prawda?