毎回tmuxを入力する必要がなく、デフォルトのbashシェルをtmuxに直接入れたいです。
Shellログインごとにtmuxを開始 、Arch wikiから、動作するようです。次のbashコード行を.bashrc
のエイリアスの前に追加するだけです。他のシェルのコードは非常に似ています:
[[ $TERM != "screen" ]] && exec tmux
@StarNamerの答えは一般的に正確ですが、(1)システムにtmuxが存在すること、(2)インタラクティブシェルにいること、および(3)tmuxが内部で実行されないことを確認するために次のテストを含めます自体:
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
exec tmux
fi
参考文献
command
を使用してコマンドの存在を確認する- http://man7.org/linux/man-pages/man1/bash.1.html#Shell_BUILTIN_COMMANDScommand
の代わりにwhich
を使用してコマンドの存在を確認する理由- https://unix.stackexchange.com/a/8525$PS1
を使用してインタラクティブシェルを確認する- https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM
環境変数の状態 "tmux内で実行されているすべてのプログラム"- http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANESのような行を追加する
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
あなたのbashrcファイルでおそらく仕事をします。この行は、tmuxをデタッチまたは終了すると、sshを終了して接続を終了することに注意してください。この構成は、接続を終了するためのキーストロークを節約できるので気に入っています。しかし、これが気に入らず(これは非常にありそうもないことです)、終了後もログインシェルに残したい場合は、exit
の部分を削除するだけです。
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
アタッチするtmuxセッションがないときに接続が閉じられるため、tmux attach
をexec
でラップしないでください。
ログインシェルを変更するコマンドchsh
があります。相談man chsh
。
私はうまく使っています
_case $- in *i*)
[ -z "$TMUX" ] && exec tmux
esac
_
私の_.zshrc
_で。 bashを使用している場合は、代わりに_.bashrc
_に入れてください。
また、tmux
をデフォルトのシェル(chsh -s $(which tmux)
)として設定しようとしたところ、SSHを介した直接コマンドの実行が中断されたようです。 _ssh $some_server echo foo
_は出力を生成しません。
@Louis Maddoxの答えに加えて、私はtmux部分を実行します。
(exec tmux attach || exec tmux new-session)
広範なチェックと条件付きセッションチェックを組み合わせ、独自のスピンを適用して、接続または作成されるデフォルトセッションを作成しました。別の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
これらの回答に基づいて:
上記の応答のどれも私にとってうまくいきませんでした-_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行にまとめることもできますが、読みやすくするために問題ないと思います。
chsh
コマンドを使用してtmuxをデフォルトのシェルとして設定し、次に.tmux.conf
:
set-option -g default-Shell /path/to/your/favourite/Shell
行末のパスを変更することを忘れないでください。
これは私の~/.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のマニュアルを参照してください)。
これにより、ユーザーのすべての新しいシェルでデフォルトでtmuxが開きます
cmd='[ $TERM == screen ] || exec tmux'
echo -e "$cmd\n$(cat ~/.bashrc)" > ~/.bashrc
これを~/.tmux.conf
に追加してください
set -g default-command /usr/local/bin/fish