每当我开始新的shell会话时,如何使TMUX处于活动状态?

Mic*_*ant 61 shell terminal session tmux

而不是tmux每次都要打字,我怎么能tmux一直用于新的会话窗口

所以,如果我没有打开终端窗口然后打开一个,第一个会话怎么样tmux

看起来似乎.bashrc有点像?

huo*_*uon 66

警告 这现在可以'腐败'(让它无法打开终端窗口 - 这不好!)你的Ubuntu登录.请务必谨慎使用,并确保您可以在计算机上安装第二个管理员帐户,以防万一我遇到同样的问题.有关更多详细信息和不同方法,请参阅我的其他答案.

鉴于该警告,最简单的解决方案可以是将tmux调用附加到您的结尾.bashrc,例如

alias g="grep"
alias ls="ls --color=auto"

# ...other stuff...

if [[ ! $TERM =~ screen ]]; then
    exec tmux
fi
Run Code Online (Sandbox Code Playgroud)

请注意,这exec意味着当您打开终端时启动的bash进程被替换tmux,因此Ctrl-B D(即从tmux断开连接)实际上会关闭窗口,而不是返回原始的bash进程,这可能是您想要的行为?

此外,该if语句是必需的(它检测当前的bash窗口是否已经在tmux进程中)否则每次启动tmux时,包含的bash进程将尝试启动自己的tmux会话,从而导致无限数量的嵌套tmuxen可能,错误,非常烦人(说,它看起来很酷).


但是,这可能会使bash其他程序无法预期的风险很小,因为运行bash可能会导致它变成tmux进程,所以最好修改启动终端模拟器的方式.

我使用一个小的可执行shell脚本~/bin/terminal(带~/binin $PATH,所以它是自动发现的)看起来有点像:

#!/bin/sh
exec gnome-terminal -e tmux
Run Code Online (Sandbox Code Playgroud)

(我不使用gnome-terminal,所以你可能不得不删除它exec,我不确定.)

现在每当你运行terminalscipt时,你都有一个带有tmux的终端.您可以将其添加到菜单/桌面/键盘快捷方式以替换默认终端.

(如果您愿意,此方法还允许您以后更轻松地自定义有关终端模拟器的其他内容.)

  • 是否更好地将行放在文件的开头?如果更换了进程,那么`.bashrc`所做的所有更改都将丢失.然后当`tmux`再次产生`bash`时,再次获取`.bashrc`.为什么要跑两次!? (4认同)

Mic*_*ant 15

我最初接受的答案是在最近一次升级后停止了我的Ubuntu14系统.

使用其中之一

[ -z "$TMUX" ] && command -v tmux > /dev/null && TERM=xterm-256color && exec tmux
Run Code Online (Sandbox Code Playgroud)

要么

[ $TERM != "screen" ] && TERM=xterm-256color && exec tmux
Run Code Online (Sandbox Code Playgroud)

会阻止我甚至无法登录.由于在计算机上进行了第二次管理员登录,我只能解决此问题.

在Ubuntu(以及在osx中​​)对我的修复是将我的终端程序改为实际运行tmux,即

在此输入图像描述

我还有

[ `uname -s` != Linux ] && exec tmux
Run Code Online (Sandbox Code Playgroud)

作为我的最后.bashrc一行,但他现在只用于我的Mac OSX系统.


K.H*_*.A. 14

如果你想要一个tmux会话,把以下内容放在〜/ .bashrc中用于bash或〜/ .zshrc用于zsh:

tmux attach &> /dev/null

if [[ ! $TERM =~ screen ]]; then
    exec tmux
fi
Run Code Online (Sandbox Code Playgroud)

tmux attach是为了确保它是否附加了会话,如果没有会话,您将不会收到有关" 无会话 " 的警告.


hua*_*hao 7

对我来说,我希望每次在我的远程机器上安装时都会启动我的tmux,当我从tmux分离或退出时,应该自动关闭连接.在深入研究这个问题一段时间之后,下面的代码完全符合我的要求,并且被认为是我所知道的最优化的代码.

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session && exit;}
Run Code Online (Sandbox Code Playgroud)

请注意,此行应该是bashrc文件中的第一行,以确保首先加载它.我们不能在"tmux attach"之前放置一个"exec"调用,因为在exec用tmux替换bash进程之后,即使没有要附加的会话,连接也将被关闭.因此,在我们分离或退出连接的会话后,我们需要一个"退出"调用来终止连接.但是将new-session命令放在前面的"exec"就好了,因为这是要执行的最后一个命令.