SSH経由で接続した直後にスクリプトを実行するにはどうすればよいですか?

SSH経由で接続した直後にスクリプトを実行するにはどうすればよいですか?

この質問をし始めましたが、開いてみる頃には答えが出ました。この質問を投稿し、私の解決策についてフォローアップし、他の潜在的な解決策を開いておきます。

<背景ストーリー>

私はtmuxとvimユーザーです。私はFlashムービーでカーネルパニックが発生したときにUbuntu開発システムがクラッシュすることを心配する必要はないので、リモートvimで作業するのが好きです。 tmuxを実行することは、再起動後に開いているファイルが私を待っていて、中断したところから続行できることを意味します。次のように接続すると、tmuxセッションでvimを実行できません。

ssh example.com -t 'tmux attach'

正常に解凍し、tmux セッションに手動で接続すると発生しない UTF-8 の問題が発生します。

</背景の物語>

.zshrc.bashrcそのため、私の開発環境に必要な可能性がある私の設定(またはまだbashを使用している場合はユーザーの設定)に影響を与えないsshログインで何かを開始する再利用可能な方法が必要です。時にはこのコンピュータでローカルで作業します。

ベストアンサー1

を実行すると、ssh example.comsshデーモンはログインシェルを起動し、ログインシェルはログインシェルに従ってまたは~/.profile~/.bash_profile読み込みます。を使用または使用せずにリモートで実行するコマンドを指定した場合、sshデーモンは通常のシェルを起動するため、コマンドは読み取られません。治療:~/.zprofile~/.login-t.profile

ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'

ほとんどのsshデーモンは環境変数の転送を拒否するように設定されていますLC_*。ただし、sshデーモンがexample.com許可している場合は、カスタム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を介して環境変数を渡す方法に関する追加情報があります。

おすすめ記事