Ich möchte, dass meine Standard-Bash-Shell direkt in tmux eingebunden wird, anstatt jedes Mal tmux eingeben zu müssen.
79
Das scheint zu funktionieren ...
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
Fügen Sie Ihrer .bashrc-Datei einfach die folgende Zeile Bash-Code hinzu, bevor Sie die Aliase eingeben. Der Code für andere Shells ist sehr ähnlich:
[[ $TERM != "screen" ]] && exec tmux
[[ $- != *i* ]] && return
keine Endlosschleife sein (von derselben Seite)TERM
des Benutzers möglicherweise einen anderen Wert.tmux.conf
angibt. Es ist besser zu überprüfen, ob dieTMUX
Variable gesetzt ist oder nicht.Die Antwort von @ StarNamer ist im Allgemeinen korrekt, obwohl ich normalerweise die folgenden Tests einbeziehe, um sicherzustellen, dass (1) tmux auf dem System vorhanden ist, (2) wir uns in einer interaktiven Shell befinden und (3) tmux nicht versucht, innerhalb dieser Shell zu laufen selbst:
Verweise
command
Überprüfen Sie mit bash , ob ein Befehl vorhanden ist - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand
anstattwhich
zu überprüfen, ob Befehle vorhanden sind - https://unix.stackexchange.com/a/85250$PS1
für interaktiv Shell überprüfen - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM
Umgebungsvariablen "für alle Programme, die in tmux ausgeführt werden" - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANESquelle
command
aber ich habe nicht bemerkt, dass es es gibt.exec
Anweisung können Sie tmux nicht beenden, ohne das gesamte Terminal zu verlassen! : |exec
den aktuellen Prozess durch einen neuen. In diesem Fall wird die Bash-Anmeldeshell durch tmux ersetzt. Wenn tmux also beendet wird, kann auf kein anderes Terminal zurückgegriffen werden :)exec tmux
Sie diese einfach durch Ihre bevorzugtetmux attach
exec tmux
Ich benutze"exec tmux new-session -A -s main
habe ich immer eine Sitzung mit dem Namen "main" und binde sie an diese an (anstatt bei jeder Verbindung mit meinem Remotecomputer eine neue zu erstellen), aber sie stürzt nicht ab, wie wenn "Ich benutze",tmux attach
falls keine Sitzung verfügbar ist (hier zu finden: unix.stackexchange.com/a/176885/256942 )Hinzufügen einer Zeile wie
in Ihrer bashrc-Datei erledigt wahrscheinlich die Arbeit. Beachten Sie, dass diese Zeile ssh beendet und die Verbindung beendet, sobald Sie tmux trennen oder beenden. Ich mag diese Konfiguration, da sie Tastatureingaben speichert, um die Verbindung zu beenden. Aber wenn Sie dies nicht lieben (was meiner Meinung nach sehr unwahrscheinlich ist) und nach der Beendigung lieber in der Login-Shell bleiben möchten, entfernen Sie einfach das
exit
Teil:Beachten Sie auch, dass Sie keinen Zeilenumbruch durchführen sollten , da dies dazu führen würde, dass die Verbindung geschlossen wird, wenn keine tmux-Sitzungen vorhanden sind,
tmux attach
mit denenexec
eine Verbindung hergestellt werden kann.quelle
Es gibt einen Befehl, der
chsh
die Anmeldeshell ändert. Konsultierenman chsh
.quelle
tmux
ist keine Shell, sondern ein Terminal-Multiplexer wie GNU-Bildschirm. Interessanterweise unterstützt es die-c
Option gemäß der Manpage , so dass es wie eine Shell funktioniert, die gerade ausreicht, um es als Anmeldeshell zu verwenden, aber ich vermute, dass es nicht in allen Situationen richtig funktioniert, z. B. bei grafischen Anmeldungen über gdm / kdm .ssh $some_server echo foo
) zu unterbrechen ./etc/shells
, so dass es eine gültige Login-Shell ist.default-shell
Einstellung in der tmux-Konfiguration so konfigurieren, dass sie auf eine tatsächliche Shell verweist.Ich benutze es erfolgreich
in meinem
.zshrc
. Wenn Sie bash verwenden, geben Sie es.bashrc
stattdessen in Ihr ein.Ich habe auch gerade versucht,
tmux
als Standard-Shell (chsh -s $(which tmux)
) festzulegen, und es scheint, als würde die direkte Befehlsausführung über SSH unterbrochen, dh esssh $some_server echo foo
wird keine Ausgabe erzeugt.quelle
Gehen Sie zu den Terminalpräferenzen.
Und dann klicken Sie auf "Befehlsleiste".
Aktivieren Sie das Kontrollkästchen "Benutzerdefinierten Befehl anstelle meines Verkaufs ausführen" und schreiben Sie den gewünschten Befehl beim Start Ihres Terminals.
quelle
Keine der oben genannten Antworten hat bei mir funktioniert -
exec tmux
verhindert, dass ich tmux beende, ohne die Shell zu beenden (unabhängig davon, ob sie mitCtrl
+T
oder über das Anwendungsmenü geöffnet wurde ).Ich benutze Linux Mint, die Sie zuordnen bestimmte Hotkeys auf Befehle können, und (un-koscher , wie es sie auch sein mag ..) Ich habe Bash - Shells mit Befehlen dort starten, zB
Win
+Alt
+B
tut irgendeine Art von gewundenenbash -exec(vim)
Erklärung Bearbeiten Sie meine .bashrc-Datei, damit sie wie eine normale Shell funktioniert.tmux wurde in dieser Situation eher geladen als vim, nachdem das Obengenannte oben auf meiner Seite platziert wurde
.bashrc
. Ich habe die tmux-Ausführungszeile in eine andere if-Anweisung eingeschlossen und überprüft, ob sie im interaktiven Modus ausgeführt wird.Sie könnten das alles in eine Zeile schreiben, aber für die Lesbarkeit denke ich, dass das in Ordnung ist.
quelle
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
Wenn ich @ Louis Maddox 'Antwort hinzufüge, würde ich tmux part with ausführen.
quelle
exec sh -c 'tmux a || tmux'
, was (nach dem in Ihrer Antwort sucht) wird wahrscheinlich schlechte Dinge passieren , wenn tmux aus irgendeinem Grunde nicht starten kann ..... danke, ich werde Sie von jetzt an :) verwendentmux new -A -s mysession
wird wohl auch funktionieren.Dies ist in meinem
~/.profile
(ich benutzeksh93
):Wenn die
TMUX
Umgebungsvariable nicht gesetzt / leer ist, befinden wir uns noch nicht in einer tmux-Sitzung.Wenn der
tmux has-session
Beendigungsstatus Null (true) zurückgegeben wird, ist eine Sitzung zum Anhängen verfügbar. Anhängen.Wenn nicht, erstellen Sie eine neue Sitzung.
Es ist auch möglich,
tmux
als Login-Shell zu verwenden. Wenn Sie dies jedoch tun, stellen Sie sicher, dass Siedefault-shell
eine tatsächliche Shell in Ihrer~/.tmux.conf
Datei festgelegt haben (weitere Informationen hierzu finden Sie im tmux-Handbuch).quelle
Sie können (und sollten es jetzt wahrscheinlich auch) den
chsh
Befehl verwenden, um tmux als Standard-Shell festzulegen. Fügen Sie dann Folgendes hinzu.tmux.conf
:Denken Sie daran, den Pfad am Ende der Zeile zu ändern.
quelle
Ich habe die umfangreichen Überprüfungen mit der Prüfung bedingter Sitzungen kombiniert und meine eigenen Einstellungen vorgenommen, um eine Standardsitzung zu erstellen, mit der eine Verbindung besteht oder die ansonsten erstellt wird. Es sei denn, Sie befinden sich in einer anderen tmux-Sitzung oder andere Schutzbedingungen sind erfüllt.
Basierend auf diesen Antworten:
https://unix.stackexchange.com/a/306165/198110
https://unix.stackexchange.com/a/113768/198110
quelle
Fügen Sie dies in Ihre
~/.tmux.conf
quelle
Wie Mikel bereits in seinem Kommentar ausgeführt hat, kann tmux als Login-Shell Nebenwirkungen haben. Aber Sie können
tmux
Ihre Standard-Shell buchstäblich machen. Die Standard-Shell eines Benutzers ist in / etc / passwd definiert. So können Sie root werden und / etc / passwd bearbeiten, z. B.sudo vi /etc/passwd
nach der Zeile suchen, die mit Ihrem Benutzernamen beginnt. Es endet wahrscheinlich mit:/bin/bash
. Ändern Sie / bin / bash in / usr / bin / tmux, und jetzt ist tmux Ihre Standardanmeldeshell.Es kann jedoch nicht garantiert werden, dass dies keine Probleme verursacht!
Was kann besser arbeiten ist nicht alles zu tun , die Root - Privilegien requries. Ich würde versuchen, eine Datei in meinem Home-Verzeichnis mit dem Namen .bash_login zu erstellen und tmux aus dieser Datei heraus zu starten: `echo" tmux "> ~ / .bash_login.
Dies sollte funktionieren, aber Sie müssen versuchen, unsere selbst zu finden, da die Bash-Dokumentation nicht sehr genau darüber ist, welche Datei wann gelesen und ausgeführt wird.
quelle
chsh
tut! Nur dass Ihr Weg root sein muss und fehleranfällig ist. Durch das Ausführentmux
von.bash_login
wird die Wahrscheinlichkeit erhöht, dass Remoteanmeldungen unterbrochen werden.