J'ai commencé à poser cette question mais y ai répondu pendant que je l'avais ouverte. Je vais poster cette question, la suivre avec ma solution et la laisser ouverte à d'autres solutions potentielles.
<
histoire>
Je suis un utilisateur de tmux et vim. J'aime le travail à distance sur vim car je n'ai pas à m'inquiéter du fait que les machines de développement Ubuntu se dérobent lorsqu'un film flash me donne une panique au noyau. L'exécution de tmux signifie que les fichiers ouverts m'attendent après le redémarrage et que je peux continuer là où je m'étais arrêté. J'ai eu des problèmes avec vim en cours d'exécution dans une session tmux lorsque je me connecte comme ceci:
ssh example.com -t 'tmux attach'
Les problèmes UTF-8 surgissent qui ne surviennent pas lors du décorticage normal et de la connexion manuelle à une session tmux.
<
/ backstory>
Je veux donc une méthode réutilisable pour démarrer quelque chose lors de la connexion ssh, qui n'affecte aucune des autres choses que j'ai configurées dans mon .zshrc
(ou votre .bashrc
si vous utilisez toujours bash) qui peuvent être requises pour mon environnement de développement, cela n'affecte pas apparaître lorsque je travaille occasionnellement localement sur la même machine.
la source
ssh example.com -t 'tmux attach'
n'est pas parce qu'il a des problèmes de chargement de mon environnement mais parce que j'ai eu des problèmes avec l'affichage des caractères UTF-8; ce problème n'existe pas lors de la connexion de la manière conventionnelle. C'est pourquoi cette question concerne l'exécution de scripts immédiatement après la connexion via SSH..profile
? J'ai supposé que le problème était dû à des paramètres régionaux incorrectement définis sur la machine cible, que vous/etc/profile
ou.profile
corrigiez. Le problème des paramètres régionaux peut probablement être résolu avec plus d'informations.J'ai précédemment conseillé de définir
PermitUserEnvironment yes
et d'ajouter une variable d'environnement dans votre~/.ssh/environment
jusqu'à ce qu'Eli Heady intervienne avec une meilleure suggestion dans les commentaires ci-dessous.Ouvrez votre
.zlogin
(bash:.bash_profile
etc.) et mettez ce qui suit:Inspiration tirée de: Comment puis-je demander une entrée dans un script shell Linux?
Notez que j'ai utilisé le
.zlogin
fichier mais vous pouvez utiliser votre.zshrc
fichier mais j'aime garder mes fichiers dot bien rangés et il les sépare afin que je puisse les utiliser sur d'autres machines.Remplacez la question par quelque chose qui vous convient et remplacez
MY_SSH_CONNECTION="yes" tmux attach
par ce que vous souhaitez exécuter à ce stade.Notez comment le script définit
MY_SSH_CONNECTION="yes"
avanttmux attach
de le transmettre à tmux car il ouvrira également un shell qui accédera au même script ci-dessus et empêchera toute récursivité.la source
if [[ "$SSH_CONNECTION" != "" ]]
ça devrait le faire.Moi-même, j'ajoute ceci à mes fichiers .bash_profile:
Cela me donne un peu de temps pour abandonner la refixation ou la création d'une session d'écran. Cela ne fonctionnera pas sur les formats de «commande système ssh» (qui n'appelle pas le profil ~ /.*). Une fonction shell est configurée pour se rattacher si j'abandonne.
la source
Vous pourriez envisager de courir
et exécutez votre session de terminal là-bas. Vous pouvez ensuite détacher (
^A^D
) et rattacher plus tard (à partir d'un autre client également). Cela fera disparaître le problème de l'initialisation non interactive car l'écran conserve les sessions de terminal interactives complètes (également les shells d'ouverture de session,man screen
(1) ou^A?
)la source
-t 'tmux attach'
j'ai des problèmes avec vim qui ne sont pas présents normalement. C'est pourquoi la vraie question concerne l'exécution de scripts sur ssh connect plutôt que la gestion d'écran / session.Pour parler spécifiquement des problèmes UTF-8, si vous ajoutez
Et
$LANG
est défini sur quelque chose commeen_US.UTF-8
à l'extrémité locale et votre sshd à l'extrémité distante autorise laSendEnv
directive (avecAcceptEnv
insshd_config
), le tmux à l'autre extrémité devrait l'honorer. J'ai eu ce problème pendant un certain temps et il a été difficile à résoudre.la source
Si vous souhaitez qu'il s'exécute chaque fois que vous vous connectez, vous pouvez simplement ajouter
tmux attach
au bas de votre~/.profile
ordinateur distant.la source