J'ai commencé à poser cette question mais j'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 tmux et vim. J'aime le travail vim à distance car je n'ai pas à m'inquiéter des machines de développement Ubuntu qui s'éteignent lorsqu'un film flash me donne une panique du noyau. L'exécution de tmux signifie que des fichiers ouverts m'attendent après le redémarrage et que je peux continuer là où je me suis arrêté. J'ai eu des problèmes avec vim en cours d'exécution dans une session tmux lorsque je me connecte comme suit :
ssh example.com -t 'tmux attach'
Des problèmes UTF-8 surgissent qui n'apparaissent pas lors du shelling normalement et simplement en se connectant manuellement à une session tmux.
<
/histoire>
Je veux donc une méthode réutilisable pour démarrer quelque chose sur 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 peut être nécessaire pour mon environnement de développement, cela n'apparaît pas lorsque je travaille occasionnellement localement sur ladite machine.
Réponse acceptée :
Lorsque vous exécutez ssh example.com
, le démon ssh démarre un shell de connexion pour vous, et le shell de connexion lit votre ~/.profile
(ou ~/.bash_profile
ou ~/.zprofile
ou ~/.login
en fonction de votre shell de connexion). Lorsque vous spécifiez une commande à exécuter à distance (avec ou sans -t
), le démon ssh démarre un shell ordinaire, donc votre .profile
n'est pas lu. Remède :
ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'
La plupart des démons ssh sont configurés pour refuser de transmettre des variables d'environnement à l'exception de LC_*
. Si le démon ssh sur example.com
le permet, vous pouvez abuser d'un LC_*
personnalisé variable pour démarrer tmux automatiquement - mettez ceci dans votre ~/.profile
:
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
puis connectez-vous avec LC_tmux_session= ssh example.com
ou LC_tmux_session=session_name ssh example.com
.
Cette réponse contient plus d'informations sur le passage des variables d'environnement via ssh.