Saya mulai menanyakan pertanyaan ini tetapi menjawabnya saat saya membukanya. Saya akan memposting pertanyaan ini, menindaklanjutinya dengan solusi saya dan membiarkannya terbuka untuk solusi potensial lainnya.
<
cerita latar>
Saya pengguna tmux dan vim. Saya suka kerja vim jarak jauh karena saya tidak perlu khawatir tentang mesin pengembangan Ubuntu yang keluar ketika film flash membuat saya panik kernel. Menjalankan tmux berarti file yang terbuka menunggu saya setelah saya reboot dan saya dapat melanjutkan dari tempat saya tinggalkan. Saya mengalami masalah dengan vim yang berjalan di sesi tmux ketika saya terhubung seperti ini:
ssh example.com -t 'tmux attach'
Masalah UTF-8 muncul yang tidak muncul saat masuk secara normal dan hanya melampirkan ke sesi tmux secara manual.
<
/backstory>
Jadi saya ingin metode yang dapat digunakan kembali untuk memulai sesuatu pada login ssh, yang tidak memengaruhi hal lain yang telah saya konfigurasikan di .zshrc
saya (atau .bashrc
. Anda jika Anda masih menggunakan bash) yang mungkin diperlukan untuk lingkungan pengembangan saya, yang tidak muncul ketika saya kadang-kadang bekerja secara lokal di mesin tersebut.
Jawaban yang Diterima:
Saat Anda menjalankan ssh example.com
, daemon ssh memulai shell login untuk Anda, dan shell login membaca ~/.profile
Anda (atau ~/.bash_profile
atau ~/.zprofile
atau ~/.login
tergantung pada shell login Anda). Saat Anda menentukan perintah untuk dijalankan dari jarak jauh (dengan atau tanpa -t
), daemon ssh memulai shell biasa, jadi .profile
. Anda tidak dibaca. Obat:
ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'
Kebanyakan daemon ssh dikonfigurasi untuk menolak mentransmisikan variabel lingkungan kecuali LC_*
. Jika daemon ssh di example.com
mengizinkannya, Anda dapat menyalahgunakan LC_*
khusus variabel untuk memulai tmux secara otomatis — letakkan ini di ~/.profile
. Anda :
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
lalu masuk dengan LC_tmux_session= ssh example.com
atau LC_tmux_session=session_name ssh example.com
.
Jawaban ini memiliki lebih banyak informasi tentang meneruskan variabel lingkungan melalui ssh.