Ho iniziato a fare questa domanda ma ho risposto mentre l'avevo aperta. Pubblicherò questa domanda, seguirò la mia soluzione e la lascerò aperta ad altre potenziali soluzioni.
<
retroscena>
Sono un utente di tmux e vim. Mi piace il lavoro di vim remoto perché non devo preoccuparmi che le macchine di sviluppo di Ubuntu si rompano quando un film in flash mi dà il panico del kernel. L'esecuzione di tmux significa che i file aperti mi stanno aspettando dopo il riavvio e posso continuare da dove avevo interrotto. Ho avuto problemi con vim in esecuzione in una sessione tmux quando mi collego in questo modo:
ssh example.com -t 'tmux attach'
Emergono problemi con UTF-8 che non si verificano quando si esegue il bombardamento normalmente e si collega manualmente a una sessione tmux.
<
/backstory>
Quindi voglio un metodo riutilizzabile per avviare qualcosa su ssh login, che non influisca su nessuna delle altre cose che ho configurato nel mio .zshrc
(o il tuo .bashrc
se usi ancora bash) che potrebbe essere richiesto per il mio ambiente di sviluppo, questo non appare quando lavoro occasionalmente localmente su quella stessa macchina.
Risposta accettata:
Quando esegui ssh example.com
, il demone ssh avvia una shell di login per te e la shell di login legge il tuo ~/.profile
(o ~/.bash_profile
o ~/.zprofile
o ~/.login
a seconda della shell di accesso). Quando specifichi un comando da eseguire in remoto (con o senza -t
), il demone ssh avvia una normale shell, quindi il tuo .profile
non viene letto. Rimedio:
ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'
La maggior parte dei demoni ssh è configurata per rifiutare la trasmissione di variabili d'ambiente ad eccezione di LC_*
. Se il demone ssh su example.com
lo consente, puoi abusare di un LC_*
personalizzato variabile per avviare automaticamente tmux:inseriscilo nel tuo ~/.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
quindi accedi con LC_tmux_session= ssh example.com
o LC_tmux_session=session_name ssh example.com
.
Questa risposta contiene ulteriori informazioni sul passaggio di variabili di ambiente su ssh.