web-dev-qa-db-ja.com

sshログイン時にtmuxを実行する

Tmuxがsshログインで起動するようにします。

一般的なアドバイスは、これを~/.bashrcに追加することです。

if [ -z "$TMUX" ] && [ -n "$SSH_TTY" ] && [[ $- =~ i ]]; then
  tmux attach-session -t mysession 2>/dev/null || tmux new-session -s mysession
fi

しかし、ログインすると、tmuxから次のエラーが表示されます。

失われたサーバー

...そして、いつものようにbashにいます。


更新

睡眠を追加するとき:

if [ -z "$TMUX" ] && [ -n "$SSH_TTY" ] && [[ $- =~ i ]]; then
  tmux attach-session -t mysession 2>/dev/null || $(sleep 1 && tmux new-session -s mysession)
fi

...それが機能します。おかしい!理由は何ですか?

3
lonix

tmux~/.bash_profile(ログインシェルの場合)または~/.bashrc(インタラクティブシェルの場合)で自動的に起動するには、次のようにします。

if [[ -z $TMUX ]] && [[ -n $SSH_TTY ]]; then
    session=mysession

    if tmux has-session -t "$session" 2>/dev/null; then
        exec tmux attach-session -t "$session"
    else
        exec tmux new-session -s "$session"
    fi
fi

現在のシェルが既にtmux内で実行されていない限り、シェルがsshによって起動されている場合、これはシェルをtmuxセッションに置き換えます。

tmuxの新しいバージョンでは、代わりに

if [[ -z $TMUX ]] && [[ -n $SSH_TTY ]]; then
    exec tmux new-session -A -s mysession
fi

これを行うにはafterTERMLC_*などの変数を設定します(これらを設定した場合)。これらは端末の機能とロケールに影響します。

sshtmuxを実行するために疑似ttyを必要とするため、ssh -tで接続する必要があります(またはRequestTTY force~/.ssh/configを使用して接続する必要があります)。 。

3
Kusalananda