Chciałbym, aby moja domyślna powłoka bash przechodziła bezpośrednio do tmux zamiast mojego ciągłego wpisywania tmux za każdym razem.
79
To wydaje się działać ...
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
Po prostu dodaj następujący wiersz kodu bash do .bashrc przed aliasami; kod dla innych powłok jest bardzo podobny:
[[ $TERM != "screen" ]] && exec tmux
[[ $- != *i* ]] && return
nie bycia nieskończoną pętlą (z tej samej strony)TERM
użytkownika może ustawić na inną wartość.tmux.conf
. Lepiej sprawdzić, czyTMUX
zmienna jest ustawiona, czy nie.@ Odpowiedź StarNamera jest na ogół dokładna, chociaż zazwyczaj dołączam następujące testy, aby upewnić się, że (1) tmux istnieje w systemie, (2) jesteśmy w interaktywnej powłoce i (3) tmux nie próbuje uruchomić się w obrębie samo:
Bibliografia
command
do sprawdzenia istnienia polecenia - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand
zamiastwhich
sprawdzać istnienie poleceń - https://unix.stackexchange.com/a/85250$PS1
do sprawdzania interaktywnej powłoki - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM
zmiennej środowiskowej „dla wszystkich programów działających w tmux” - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANESźródło
command
wcześniej, ale nie zdawałem sobie sprawy, że istnieje.exec
instrukcja nie pozwala ci wyjść z tmux bez wychodzenia z całego terminalu! : |exec
zastępuje bieżący proces nowym - w tym przypadku zastępuje powłokę logowania bash tmux, więc kiedy tmux kończy działanie, nie ma innego terminala, do którego można by wrócić :)exec tmux
na preferowanytmux attach
exec tmux
używam,exec tmux new-session -A -s main
więc zawsze będę mieć sesję o nazwie main i przyłączę się do niej (zamiast tworzenia nowej za każdym razem, gdy łączę się z moją maszyną zdalną), ale nie zawiedzie się tak, jaktmux attach
w przypadku, gdy nie ma dostępnej sesji (tutaj: unix.stackexchange.com/a/176885/256942 )Dodanie linii podobnej do
w twoim pliku bashrc prawdopodobnie wykona zadanie. Zauważ, że ta linia zakończy działanie ssh i zakończy połączenie po odłączeniu lub wyjściu z tmux. Podoba mi się ta konfiguracja, ponieważ oszczędza naciśnięcia klawiszy, aby zakończyć połączenie. Ale jeśli nie podoba ci się to (co moim zdaniem jest bardzo mało prawdopodobne) i wolisz pozostać w powłoce logowania po zakończeniu, po prostu usuń
exit
część:Należy również pamiętać, że nie powinien zawijać
tmux attach
sięexec
, gdyż spowodowałoby to połączenie ma być zamknięty, gdy nie istnieją żadne sesje tmux dołączyć do.źródło
Istnieje polecenie
chsh
zmieniające powłokę logowania. Skonsultuj sięman chsh
.źródło
tmux
nie jest powłoką, to terminalowy multiplekser, taki jak ekran GNU. Co ciekawe, obsługuje tę-c
opcję zgodnie ze stroną podręcznika , więc może działać jak powłoka wystarczająca do użycia jej jako powłoki logowania, ale podejrzewam, że nie będzie działać poprawnie we wszystkich sytuacjach, np. Graficznych logowań przez gdm / kdm .ssh $some_server echo foo
)./etc/shells
, więc jest to poprawna powłoka logowania.default-shell
ustawienia w konfiguracji tmux, aby wskazywało na rzeczywistą powłokę.Z powodzeniem korzystam
w moim
.zshrc
. Jeśli używasz bash, włóż go.bashrc
zamiast tego.Próbowałem też ustawić
tmux
jako domyślną powłokę (chsh -s $(which tmux)
) i wydaje się, że przerywa bezpośrednie wykonywanie poleceń przez SSH, np.ssh $some_server echo foo
Nie generuje żadnych wyników.źródło
Przejdź do preferencji terminalu.
Następnie kliknij przycisk „paska poleceń”.
Zaznacz „Uruchom niestandardowe polecenie zamiast mojej sprzedaży” i napisz dowolne polecenie, które chcesz wykonać podczas uruchamiania terminalu.
źródło
Żadna z powyższych odpowiedzi nie działała dla mnie -
exec tmux
uniemożliwia mi zamknięcie tmux bez wychodzenia z powłoki (niezależnie od tego, czy jest ona otwierana za pomocąCtrl
+,T
czy z menu aplikacji).Używam Linux Mint, który pozwala mapować niektóre skróty klawiszowe na polecenia, i (un-koszerne może być dla niektórych ..) Mam powłoki bash z poleceniami, które się tam zaczynają, np.
Win
+Alt
+B
Robi jakąś skomplikowanąbash -exec(vim)
instrukcję do edytuj mój .bashrc, aby działał jak zwykła powłoka.tmux załadował zamiast vim w tej sytuacji po umieszczeniu powyższego na górze mojego
.bashrc
. Owinąłem linię wykonawczą tmux w inną instrukcję if, sprawdzając, czy działa ona w trybie interaktywnym.Możesz to wszystko zawinąć w jedną linię, ale dla czytelności myślę, że to w porządku.
źródło
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
Dodając do odpowiedzi @Louis Maddox, wykonałbym część tmux za pomocą;
źródło
exec sh -c 'tmux a || tmux'
, co (po spojrzeniu na twoją odpowiedź) prawdopodobnie sprawi, że coś złego się stanie, jeśli tmux nie będzie mógł uruchomić się z jakiegokolwiek powodu ..... dziękuję, użyję twojego odtąd :)tmux new -A -s mysession
prawdopodobnie też zadziała.To jest w moim
~/.profile
(używamksh93
):Jeśli
TMUX
zmienna środowiskowa jest nieustawiona / pusta, to nie jesteśmy już w sesji tmux, więc ...Jeśli
tmux has-session
zwraca z zerowym statusem wyjścia (prawda), dostępna jest sesja do przyłączenia. Dołącz do tego.Jeśli nie, utwórz nową sesję.
Można również użyć go
tmux
jako powłoki logowania. Jeśli to zrobisz, pamiętaj, aby ustawićdefault-shell
rzeczywistą powłokę w swoim~/.tmux.conf
pliku (więcej informacji na ten temat znajdziesz w instrukcji tmux).źródło
Możesz (i na razie prawdopodobnie powinien) użyć
chsh
polecenia, aby ustawić tmux jako domyślną powłokę, a następnie dodać następujące polecenie do.tmux.conf
:Pamiętaj tylko, aby zmodyfikować ścieżkę na końcu linii.
źródło
Połączyłem szczegółowe kontrole z warunkowym sprawdzaniem sesji i nadałem mu własny obrót, aby utworzyć domyślną sesję, która jest połączona lub utworzona. Chyba że bierzesz udział w innej sesji Tmux lub inne warunki ochronne są spełnione.
Na podstawie tych odpowiedzi:
https://unix.stackexchange.com/a/306165/198110
https://unix.stackexchange.com/a/113768/198110
źródło
Dodaj to do swojego
~/.tmux.conf
źródło
Jak już stwierdził Mikel w swoim komentarzu, aby mieć tmux, ponieważ powłoka logowania może mieć skutki uboczne. Ale możesz stworzyć
tmux
domyślną powłokę, dosłownie. Domyślna powłoka użytkownika jest zdefiniowana w / etc / passwd. Możesz więc zostać rootem i edytować / etc / passwd, np.sudo vi /etc/passwd
Wyszukaj wiersz zaczynający się od twojej nazwy użytkownika. Prawdopodobnie kończy się na:/bin/bash
. Zmień / bin / bash na / usr / bin / tmux, a teraz tmux jest domyślną powłoką logowania.Jednak nie ma gwarancji, że nie spowoduje to problemów!
Co może działać lepiej, to NIE robić niczego, co wymaga uprawnień roota. Spróbowałbym utworzyć plik w moim domowym directoy o nazwie .bash_login i uruchomić tmux z tego pliku: `echo" tmux "> ~ / .bash_login.
To powinno zadziałać, ale musisz spróbować znaleźć naszą własną, b / c dokumentacja bash nie jest bardzo dokładna na temat tego, jaki plik jest odczytywany i wykonywany.
źródło
chsh
robi! Tyle że twoja droga wymaga rootowania i jest podatna na błędy. Bieganietmux
z.bash_login
jest bardziej podatne na złamania zdalnego logowania.