Comencé a hacer esta pregunta, pero la respondí mientras la tenía abierta. Voy a publicar esta pregunta, continuar con mi solución y dejarla abierta a otras posibles soluciones.
<
trasfondo>
Soy usuario de tmux y vim. Me gusta el trabajo remoto de vim, ya que no tengo que preocuparme de que las máquinas de desarrollo de Ubuntu se desconecten cuando una película flash me da pánico en el kernel. Ejecutar tmux significa que los archivos abiertos me esperan después de reiniciar y puedo continuar desde donde lo dejé. He tenido problemas con la ejecución de vim en una sesión de tmux cuando me conecto así:
ssh example.com -t 'tmux attach'
Surgen problemas de UTF-8 que no aparecen cuando se ejecuta normalmente y simplemente se adjunta a una sesión de tmux manualmente.
<
/trasfondo>
Entonces, quiero un método reutilizable para iniciar algo en el inicio de sesión ssh, que no afecte ninguna de las otras cosas que configuré en mi .zshrc
(o su .bashrc
si todavía usa bash) que puede ser necesario para mi entorno de desarrollo, eso no aparece cuando ocasionalmente estoy trabajando localmente en dicha máquina.
Respuesta aceptada:
Cuando ejecuta ssh example.com
, el demonio ssh inicia un shell de inicio de sesión para usted, y el shell de inicio de sesión lee su ~/.profile
(o ~/.bash_profile
o ~/.zprofile
o ~/.login
dependiendo de su shell de inicio de sesión). Cuando especifica un comando para ejecutar de forma remota (con o sin -t
), el demonio ssh inicia un shell ordinario, por lo que su .profile
no se lee. Remedio:
ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'
La mayoría de los demonios ssh están configurados para rechazar la transmisión de variables de entorno excepto LC_*
. Si el demonio ssh en example.com
lo permite, puede abusar de un LC_*
personalizado variable para iniciar tmux automáticamente:pon esto en tu ~/.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
luego inicie sesión con LC_tmux_session= ssh example.com
o LC_tmux_session=session_name ssh example.com
.
Esta respuesta tiene más información sobre cómo pasar variables de entorno a través de ssh.