Estou usando o tmux com frequência (e principalmente) ao trabalhar remotamente em um pty SSH somente de texto; é muito útil caso uma conexão caia. Eu executo tarefas de computação longas (de horas a dias) e me conecto de diferentes hosts remotos para verificar. Esta é quase a única coisa que faço com o tmux; Estou longe de ser um profissional nisso, então minha pergunta pode ser muito básica, mas não consigo encontrar uma resposta.
Eu tenho um comando no host que lê e analisa o endereço do cliente da $SSH_CONNECTION
variável shell para se comunicar (diretamente, sem túnel ssh) com um daemon na minha máquina cliente atual de uma certa maneira¹. Isso quebra no tmux quando eu atribuo a uma sessão iniciada originalmente em outra máquina. O shell mais abaixo na sessão do tmux já capturou a variável em sua inicialização e possui o endereço da máquina cliente que iniciou a sessão, não aquela que está atualmente anexada a ela.
Uma solução simples seria redefinir essa variável completamente no my .bashrc
, para que a ferramenta nem tente se comunicar com a conexão do cliente dentro de uma sessão tmux (eu posso dar a essa ferramenta um IP em sua linha de comando, afinal, se ela falhar em adivinhe um). Acredito que posso contar com a presença da $TMUX
variável env para evitar capturar o endereço IP completamente no meu .bashrc.
Mas a coisa certa seria de alguma forma levantar essa variável do bash em que executo o tmux attach
comando. Eu entendo que não pode ser totalmente automático, pois o tmux no controle remoto provavelmente não poderia modificar o ambiente do primeiro shell já em execução. Mas talvez eu possa usar alguns scripts tmux sofisticados para extrair variáveis de ambiente do tmux
processo que executou o attach
comando (a máquina de sessão SSH anexada as definiu corretamente em seu ambiente), armazene os valores em algum lugar nas variáveis de sessão tmux (será que elas existem? ?), e deixe-me executar um comando personalizado para unget (ou seja, digitação falsa no bash da sessão export SSH_SESSION=....
) com um pressionamento de tecla quando eu souber que é seguro, ou seja, no prompt do bash dentro da sessão?
TL; DR: Eu quero uma maneira de definir uma variável env dentro de uma sessão que eu anexe com base em um valor de variável env em uma outra conexão pty na qual eu executo o tmux attach
comando, da maneira menos complicada, como um bom habilidoso tmuxer faria.
¹ Esta não é uma maneira boa ou segura de fazer isso, mas é como é. Temos que usar muitas coisas estranhas em computação científica, escritas por colegas cientistas, que são, ou alguns deles já foram, como neste caso, não necessariamente bons engenheiros de software. Eu faria diferente neste século, mas essa coisa tem uns 30 anos.
SSH_CONNECTION está no ambiente de atualização por padrão, então será atualizado no ambiente de sessão ao anexar, você pode copiá-lo para um shell em execução dentro do tmux com algo como: