私はこの質問をし始めましたが、開いている間に答えました。この質問を投稿し、自分の解決策をフォローアップして、他の潜在的な解決策に公開したままにします。
<コード> backstory
>
私はtmuxとvimのユーザーです。フラッシュムービーでカーネルパニックが発生したときにUbuntu開発マシンが機能しなくなることを心配する必要がないので、リモートvim作業が好きです。 tmuxを実行すると、再起動後に開いているファイルが待機し、中断したところから続行できます。このように接続すると、tmuxセッションでvimが実行されて問題が発生しました:
ssh example.com -t 'tmux attach'
UTF-8の問題は、通常のシェルインでtmuxセッションに手動で接続した場合には発生しません。
<コード> / backstory
>
そのため、sshログインで何かを開始する再利用可能な方法が必要です。これは、 .zshrc
で構成した他のどの方法にも影響しません。 (または .bashrc
私の開発環境で必要になる可能性のあるbashをまだ使用している場合は、そのマシンでローカルで作業していると表示されません。
承認された回答:
ssh example.com
を実行する場合 、sshデーモンがログインシェルを起動し、ログインシェルが〜/ .profile
を読み取ります。 (または〜/ .bash_profile
または〜/ .zprofile
または〜/ .login
ログインシェルによって異なります)。リモートで実行するコマンドを指定する場合( -t
の有無にかかわらず) )、sshデーモンは通常のシェルを開始するため、 .profile
読み取られません。対処法:
ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'
ほとんどのsshデーモンは、 LC _ *
を除いて、環境変数の送信を拒否するように構成されています。 。 example.com
のsshデーモンの場合 許可すると、カスタムの LC _ *
を悪用できます tmuxを自動的に開始する変数—これを〜/ .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
次に、 LC_tmux_session =ssh example.com
でログインします。 またはLC_tmux_session=session_name ssh example.com
。
この回答には、sshを介した環境変数の受け渡しに関する詳細情報があります。