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
(带~/bin
in $PATH
,所以它是自动发现的)看起来有点像:
#!/bin/sh
exec gnome-terminal -e tmux
Run Code Online (Sandbox Code Playgroud)
(我不使用gnome-terminal,所以你可能不得不删除它exec
,我不确定.)
现在每当你运行terminal
scipt时,你都有一个带有tmux的终端.您可以将其添加到菜单/桌面/键盘快捷方式以替换默认终端.
(如果您愿意,此方法还允许您以后更轻松地自定义有关终端模拟器的其他内容.)
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
行是为了确保它是否附加了会话,如果没有会话,您将不会收到有关" 无会话 " 的警告.
对我来说,我希望每次在我的远程机器上安装时都会启动我的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"就好了,因为这是要执行的最后一个命令.
归档时间: |
|
查看次数: |
39774 次 |
最近记录: |