Ich fing an, diese Frage zu stellen, beantwortete sie aber, während ich sie offen hatte. Ich werde diese Frage posten, sie mit meiner Lösung verfolgen und sie für andere mögliche Lösungen offen lassen.
<
Hintergrundgeschichte>
Ich bin ein tmux- und vim-Benutzer. Ich mag Remote-Vim-Arbeit, da ich mir keine Sorgen machen muss, dass Ubuntu-Entwicklungsmaschinen ausbrechen, wenn ein Flash-Film bei mir eine Kernel-Panik auslöst. Das Ausführen von tmux bedeutet, dass offene Dateien nach dem Neustart auf mich warten und ich dort weitermachen kann, wo ich aufgehört habe. Ich hatte Probleme mit vim in einer tmux-Sitzung, wenn ich mich wie folgt verbinde:
ssh example.com -t 'tmux attach'
Es treten UTF-8-Probleme auf, die nicht auftreten, wenn Sie normal einsteigen und einfach manuell an eine tmux-Sitzung anhängen.
<
/Hintergrundgeschichte>
Ich möchte also eine wiederverwendbare Methode, um etwas bei der SSH-Anmeldung zu starten, die keine der anderen Dinge betrifft, die ich in meiner .zshrc
konfiguriert habe (oder Ihre .bashrc
wenn Sie immer noch bash verwenden), die möglicherweise für meine Entwicklungsumgebung erforderlich sind, werden nicht angezeigt, wenn ich gelegentlich lokal auf eben dieser Maschine arbeite.
Akzeptierte Antwort:
Wenn Sie ssh example.com
ausführen , startet der ssh-Daemon eine Login-Shell für Sie und die Login-Shell liest Ihren ~/.profile
(oder ~/.bash_profile
oder ~/.zprofile
oder ~/.login
abhängig von Ihrer Login-Shell). Wenn Sie einen Befehl angeben, der remote ausgeführt werden soll (mit oder ohne -t
), startet der ssh-Daemon eine gewöhnliche Shell, also Ihre .profile
wird nicht gelesen. Abhilfe:
ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'
Die meisten ssh-Daemons sind so konfiguriert, dass sie die Übertragung von Umgebungsvariablen mit Ausnahme von LC_*
ablehnen . Wenn der ssh-Daemon auf example.com
erlaubt, können Sie einen benutzerdefinierten LC_*
missbrauchen Variable, um tmux automatisch zu starten — fügen Sie diese in Ihr ~/.profile
ein :
if [ -n "$LC_tmux_session" ] && tmux has -t "$LC_tmux_session"; then
exec tmux attach -t "$LC_tmux_session"
elif [ -n "${LC_tmux_session+1}" ] && tmux has; then
exec tmux attach
fi
Melden Sie sich dann mit LC_tmux_session= ssh example.com
an oder LC_tmux_session=session_name ssh example.com
.
Diese Antwort enthält weitere Informationen zum Übergeben von Umgebungsvariablen über ssh.