Začal jsem klást tuto otázku, ale odpověděl jsem na ni, když jsem ji měl otevřenou. Zveřejním tuto otázku, budu na ni navazovat svým řešením a nechám ji otevřenou pro další potenciální řešení.
<
backstory>
Jsem uživatel tmux a vim. Mám rád práci se vzdáleným vimem, protože se nemusím starat o to, že vývojové stroje Ubuntu vyběhnou, když mi flashový film vyvolá paniku jádra. Spuštění tmux znamená, že otevřené soubory na mě čekají po restartu a mohu pokračovat tam, kde jsem skončil. Měl jsem problémy s vim běžícím v relaci tmux, když se připojím takto:
ssh example.com -t 'tmux attach'
Objeví se problémy s UTF-8, které se neobjeví při normálním ostřelování a pouze ručním připojení k relaci tmux.
<
/backstory>
Takže chci znovu použitelnou metodu spouštění něčeho na přihlášení ssh, která neovlivní žádné další věci, které jsem nakonfiguroval v .zshrc
(nebo váš .bashrc
pokud stále používáte bash), který může být vyžadován pro mé vývojové prostředí, neobjeví se, když příležitostně pracuji lokálně na právě zmíněném počítači.
Přijatá odpověď:
Když spustíte ssh example.com
, démon ssh za vás spustí přihlašovací shell a přihlašovací shell přečte váš ~/.profile
(nebo ~/.bash_profile
nebo ~/.zprofile
nebo ~/.login
v závislosti na vašem přihlašovacím prostředí). Když zadáte příkaz, který se má spustit vzdáleně (s nebo bez -t
), ssh démon spustí obyčejný shell, tedy váš .profile
není přečteno. Náprava:
ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'
Většina démonů ssh je nakonfigurována tak, aby odmítala přenos proměnných prostředí kromě LC_*
. Pokud je démon ssh na example.com
umožňuje, můžete zneužít vlastní LC_*
proměnná pro automatické spouštění tmux — vložte ji do svého ~/.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
poté se přihlaste pomocí LC_tmux_session= ssh example.com
nebo LC_tmux_session=session_name ssh example.com
.
Tato odpověď obsahuje více informací o předávání proměnných prostředí přes ssh.