web-dev-qa-db-ja.com

デフォルトのシェルを設定してtmuxを起動する方法

毎回tmuxを入力する必要がなく、デフォルトのbashシェルをtmuxに直接入れたいです。

88
Michael Durrant

Shellログインごとにtmuxを開始 、Arch wikiから、動作するようです。次のbashコード行を.bashrcのエイリアスの前に追加するだけです。他のシェルのコードは非常に似ています:

[[ $TERM != "screen" ]] && exec tmux
49
StarNamer

@StarNamerの答えは一般的に正確ですが、(1)システムにtmuxが存在すること、(2)インタラクティブシェルにいること、および(3)tmuxが内部で実行されないことを確認するために次のテストを含めます自体:

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  exec tmux
fi

参考文献

119
user7089

のような行を追加する

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session && exit;}

あなたのbashrcファイルでおそらく仕事をします。この行は、tmuxをデタッチまたは終了すると、sshを終了して接続を終了することに注意してください。この構成は、接続を終了するためのキーストロークを節約できるので気に入っています。しかし、これが気に入らず(これは非常にありそうもないことです)、終了後もログインシェルに残したい場合は、exitの部分を削除するだけです。

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session;}

アタッチするtmuxセッションがないときに接続が閉じられるため、tmux attachexecでラップしないでください。

22
huangzonghao

ログインシェルを変更するコマンドchshがあります。相談man chsh

6
paul

端末の優先順位に移動します。 enter image description here

次に、「コマンド」バーをクリックします。 enter image description here

「売りではなくカスタムコマンドを実行する」にチェックを入れ、端末の起動時に実行するコマンドを記述します。

5
user174935

私はうまく使っています

_case $- in *i*)
    [ -z "$TMUX" ] && exec tmux
esac
_

私の_.zshrc_で。 bashを使用している場合は、代わりに_.bashrc_に入れてください。


また、tmuxをデフォルトのシェル(chsh -s $(which tmux))として設定しようとしたところ、SSHを介した直接コマンドの実行が中断されたようです。 _ssh $some_server echo foo_は出力を生成しません。

4
n.st

@Louis Maddoxの答えに加えて、私はtmux部分を実行します。

(exec tmux attach || exec tmux new-session)
3
devrimbaris

広範なチェックと条件付きセッションチェックを組み合わせ、独自のスピンを適用して、接続または作成されるデフォルトセッションを作成しました。別のtmuxセッション内、または他の保護条件が満たされている場合を除きます。

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  tmux a -t default || exec tmux new -s default && exit;
fi

これらの回答に基づいて:

https://unix.stackexchange.com/a/306165/19811

https://unix.stackexchange.com/a/113768/19811

2
yosefrow

上記の応答のどれも私にとってうまくいきませんでした-_exec tmux_は、シェルを終了せずにtmuxを閉じるのを防ぎます(Ctrl + Tまたはアプリケーションメニューから開いた場合)。

私はLinux Mintを使用しています。これにより、特定のホットキーをコマンドにマップできます(一部のコマンドにコーシャを適用しないようにしてください)。コマンドが起動するbashシェルがあります。 Win + Alt + Bは、ある種の複雑なbash -exec(vim)ステートメントを実行して.bashrcを編集するため、通常のシェルのように動作します。

上記を_.bashrc_の上部に配置した後、その状況でvimではなくtmuxがロードされました。 tmuxの実行行を別のifステートメントでラップし、インタラクティブモードで実行されていることを確認しました。

_if command -v tmux>/dev/null; then
        if [ ! -z "$PS1" ]; then # unless Shell not loaded interactively, run tmux
                [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && tmux
        fi
fi
_

これらすべてを1行にまとめることもできますが、読みやすくするために問題ないと思います。

2
Louis Maddox

chshコマンドを使用してtmuxをデフォルトのシェルとして設定し、次に.tmux.conf

set-option -g default-Shell /path/to/your/favourite/Shell

行末のパスを変更することを忘れないでください。

1

これは私の~/.profileにあります(ksh93を使用しています):

if [[ -z "$TMUX" ]]; then
    if tmux has-session 2>/dev/null; then
        exec tmux attach
    else
        exec tmux
    fi
fi

TMUX環境変数が未設定/空の場合、まだtmuxセッションに入っていないので...

tmux has-sessionがゼロの終了ステータス(true)で戻る場合は、アタッチ可能なセッションがあります。それに取り付けます。

そうでない場合は、新しいセッションを作成します。

ログインシェルとしてtmuxを使用することもできます。ただし、これを行う場合は、default-Shell~/.tmux.confファイルの実際のシェルに設定してください(詳細については、tmuxのマニュアルを参照してください)。

1
Kusalananda

これにより、ユーザーのすべての新しいシェルでデフォルトでtmuxが開きます

cmd='[ $TERM == screen ] || exec tmux'
echo -e "$cmd\n$(cat ~/.bashrc)" > ~/.bashrc
0
dctremblay

これを~/.tmux.confに追加してください

set -g default-command /usr/local/bin/fish
0
IanVaughan