私はいつも毎回tmuxを入力するのではなく、デフォルトのbashシェルをtmuxに直接入れたいです。
私はいつも毎回tmuxを入力するのではなく、デフォルトのbashシェルをtmuxに直接入れたいです。
回答:
これはうまくいくようです...
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
次のbashコード行を、エイリアスの前の.bashrcに追加するだけです。他のシェルのコードは非常に似ています:
[[ $TERM != "screen" ]] && exec tmux
TERMユーザーの.tmux.confファイルによって他の値に設定される可能性があるため、これは悪い解決策です。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代わりに使用する理由-https://unix.stackexchange.com/a/85250which$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_PANEScommand以前必要でしたが、それが存在することに気づきませんでした。
execステートメントでは、端末全体を終了せずにtmuxを終了できません!:|
exec現在のプロセスを新しいプロセスに置き換えます-この場合、bashログインシェルをtmuxに置き換えます。したがって、tmuxが終了すると、フォールバックする他の端末はありません:)
exec tmuxフレーバーに置き換えてくださいtmux attach
exec tmuxに使用するexec tmux new-session -A -s mainので、常にメインと呼ばれるセッションを持ち、それに接続します(リモートマシンに接続するたびに新しいセッションを作成する代わりに)が、tmux attach使用可能なセッションがない場合のようにクラッシュしません(ここにあります:unix.stackexchange.com/a/176885/256942)
のような行を追加する
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
あなたのbashrcファイルでおそらく仕事をするでしょう。この行は、tmuxをデタッチまたは終了すると、sshを終了して接続を終了することに注意してください。キーストロークを保存して接続を終了するため、この構成が気に入っています。ただし、これが気に入らない場合(これは非常にありそうもないと思います)、終了後にログインシェルに残る場合は、そのexit部分を削除するだけです。
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
また、でラップtmux attachしないでください。execこれにより、接続するtmuxセッションがないときに接続が閉じられます。
chshログインシェルを変更するコマンドがあります。相談してくださいman chsh。
tmuxはシェルではなく、GNUスクリーンのようなターミナルマルチプレクサです。おもしろいこと-cに、manページによるオプションをサポートしているので、ログインシェルとして使用するのに十分なシェルのように機能するかもしれませんが、すべての状況、たとえばgdm / kdmを介したグラフィカルログインでは適切に機能しないと思われます。
ssh $some_server echo foo)を介した直接コマンド実行を中断するようです。
/etc/shellsため、有効なログインシェルです。
default-shell、実際のシェルを指すようにtmux構成で設定を構成する必要があります。
上記の応答はどれもうまくexec tmuxいきませんでした- シェルを終了せずにtmuxを閉じることができません(Ctrl+で開くかT、アプリケーションメニューから開くか)。
Linux Mintを使用します。これにより、特定のホットキーをコマンドにマップできます。また、コマンドを起動するbashシェルがあります。たとえば、Win+ Alt+ Bは何らかの複雑なbash -exec(vim)ステートメントを.bashrcを編集して、通常のシェルのように機能するようにします。
上記の状況をmy .bashrc。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行にまとめることができますが、読みやすくするためにそれで問題ないと思います。
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
@Louis Maddoxの答えに加えて、tmux部分を実行します。
(exec tmux attach || exec tmux new-session)
exec sh -c 'tmux a || tmux'のおかげで、私は:)上で、今からあなたを使用します.....(あなたの答えを見た後)は、おそらくtmuxのは、何らかの理由で起動できない場合、悪いことが起こるようになりますこれは、
tmux new -A -s mysessionおそらく動作します。
これは私の~/.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のマニュアルを参照してください)。
chshcommandを使用してtmuxをデフォルトのシェルとして設定し、次に以下を追加することができます(そしておそらく今のところそうなっているはずです).tmux.conf。
set-option -g default-shell /path/to/your/favourite/shell
行の最後でパスを変更することを忘れないでください。
広範なセッションチェックと条件付きセッションチェックを組み合わせて、独自のスピンを実行して、接続された、または作成されたデフォルトセッションを作成しました。別の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
これらの回答に基づいて:
Mikelがすでにコメントで述べているように、ログインシェルには副作用がある可能性があるため、tmuxが必要です。しかしtmux、文字通りデフォルトのシェルを作成できます。ユーザーのデフォルトシェルは/ etc / passwdで定義されています。したがって、rootになって/ etc / passwdを編集できます。たとえばsudo vi /etc/passwd、ユーザー名で始まる行を検索します。おそらくで終わり:/bin/bashます。/ bin / bashを/ usr / bin / tmuxに変更すると、tmuxがデフォルトのログインシェルになります。
ただし、これが問題を引き起こさないという保証はありません!
うまくいくかもしれないのは、ルート権限を必要とするものは何もしないことです。私は.bash_loginという名前のホームディレクトリにファイルを作成し、そのファイル内からtmuxを起動しようとします: `echo" tmux ">〜/ .bash_login。
これは動作するはずですが、bashのbashドキュメントでは、どのファイルがいつ読み取られて実行されるかについて、あまり正確ではありません。
chshことです!あなたの方法はルートである必要があり、エラーが発生しやすいことを除きます。tmuxから実行すると、リモートログインが中断される可能性.bash_loginが高くなります。
[[ $- != *i* ]] && returnは無限ループではないことも必要でした(同じページから)