Ich fing an, diese Frage zu stellen, beantwortete sie aber, während ich sie offen hatte. Ich werde diese Frage posten, meine Lösung weiterverfolgen 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 ausfallen, wenn ein Flash-Film mich in Panik versetzt. Das Ausführen von tmux bedeutet, dass nach dem Neustart offene Dateien auf mich warten und ich dort weitermachen kann, wo ich aufgehört habe. Ich hatte Probleme mit der Ausführung von vim in einer tmux-Sitzung, wenn ich mich wie folgt verbinde:
ssh example.com -t 'tmux attach'
Es treten UTF-8-Probleme auf, die beim normalen Einspielen und beim manuellen Anhängen an eine tmux-Sitzung nicht auftreten.
<
/Hintergrundgeschichte>
Ich möchte also eine wiederverwendbare Methode zum Starten von etwas bei ssh login, die sich nicht auf andere Dinge auswirkt, die ich in meinem .zshrc
(oder Ihrem, .bashrc
wenn Sie immer noch bash verwenden) konfiguriert habe und die möglicherweise für meine Entwicklungsumgebung erforderlich sind erscheinen, wenn ich gelegentlich vor Ort an der genannten Maschine arbeite.
quelle
ssh example.com -t 'tmux attach'
liegt nicht darin, dass Probleme beim Laden meiner Umgebung auftreten, sondern darin, dass Probleme mit der UTF-8-Zeichenanzeige aufgetreten sind. Dieses Problem tritt nicht auf, wenn die Verbindung auf herkömmliche Weise hergestellt wird. Aus diesem Grund geht es bei dieser Frage um das Ausführen von Skripten unmittelbar nach dem Herstellen einer Verbindung über SSH..profile
? Ich nahm die Frage falsch eingestellten locales auf dem Zielrechner zurückzuführen, die Ihre/etc/profile
oder.profile
fixiert. Das Problem mit dem Gebietsschema kann wahrscheinlich mit weiteren Informationen behoben werden.Ich habe zuvor empfohlen,
PermitUserEnvironment yes
eine Umgebungsvariable in Ihrer zu setzen und hinzuzufügen,~/.ssh/environment
bis Eli Heady mit einem besseren Vorschlag in den Kommentaren unten eingewechselt ist .Öffne deine
.zlogin
(bash:.bash_profile
etc.) und schreibe folgendes:Inspiration: Wie fordere ich in einem Linux-Shell-Skript zur Eingabe auf?
Beachten Sie, dass ich die
.zlogin
Datei verwendet habe, aber Sie können Ihre.zshrc
Datei verwenden, aber ich möchte meine Punktedateien aufgeräumt halten und sie trennen, damit ich sie auf anderen Computern verwenden kann.Ersetzen Sie die Frage durch etwas Passendes und ersetzen Sie sie
MY_SSH_CONNECTION="yes" tmux attach
durch das, was Sie an diesem Punkt ausführen möchten.Beachten Sie, wie das Skript
MY_SSH_CONNECTION="yes"
zuvor festgelegt wurdetmux attach
, um es an tmux weiterzuleiten, da es auch eine Shell öffnet, die auf dasselbe Skript wie oben zugreift und eine Rekursion verhindert.quelle
if [[ "$SSH_CONNECTION" != "" ]]
sollte es tun.Ich selbst füge dies zu meinen .bash_profile-Dateien hinzu:
Dadurch habe ich etwas Zeit, um das erneute Anfügen oder Erstellen einer Bildschirmsitzung abzubrechen. Es funktioniert nicht mit den Formaten 'ssh system command' (die ~ /.* profile nicht aufrufen). Eine Shell-Funktion ist so eingerichtet, dass sie bei einem Abbruch erneut verbunden wird.
quelle
Sie könnten in Betracht ziehen, zu rennen
und führen Sie dort Ihre Terminalsitzung aus. Sie können dann die Verbindung trennen (
^A^D
) und später wieder herstellen (auch von einem anderen Client). Das Problem mit der nicht interaktiven Initialisierung wird dadurch behoben, da der Bildschirm voll interaktive Terminalsitzungen beibehält (optional auch Anmelde-Shells,man screen
(1) oder^A?
).quelle
-t 'tmux attach'
ich Probleme mit vim, die normalerweise nicht vorhanden sind. Aus diesem Grund geht es bei der eigentlichen Frage eher darum, Skripte auf ssh connect auszuführen, als um die Bildschirm- / Sitzungsverwaltung. Entschuldigung für dieUm mit den UTF-8-Problemen speziell zu sprechen, wenn Sie hinzufügen
Und
$LANG
ist auf so etwas wieen_US.UTF-8
auf dem lokalen Ende gesetzt und Ihr sshd auf dem entfernten Ende erlaubt dieSendEnv
Direktive (mitAcceptEnv
insshd_config
), der tmux auf dem anderen Ende sollte es honorieren. Ich hatte dieses Problem eine Weile und es war schwierig, es zu beheben.quelle
Wenn Sie möchten, dass es jedes Mal ausgeführt wird, wenn Sie eine Verbindung herstellen, können Sie es einfach auf dem Remotecomputer
tmux attach
am unteren Rand hinzufügen~/.profile
.quelle