【问题标题】:How to exit tmux without leaving my terminal如何在不离开终端的情况下退出 tmux
【发布时间】:2019-08-31 16:35:17
【问题描述】:

我在 bash 上使用 tmux,并让它从 .bashrc 自动启动。有时我想禁用它,我应该编辑我的.bashrc 来这样做。每次禁用 tmux 时都编辑文件非常麻烦,我认为做同样事情的最简单方法是在不离开终端的情况下退出 tmux。我可以这样做吗?

当我输入 exit 时,bash 和终端关闭。我试过 exec bash ,但它只是在 tmux 中重新启动了 bash。

根据https://wiki.archlinux.org/index.php/tmux#Bash,我从下面的代码开始tmux。

if [[ $DISPLAY ]]; then
        # If not running interactively, do not do anything
        [[ $- != *i* ]] && return
        [[ -z "$TMUX" ]] && exec tmux
fi

如果我只是在上面的代码中运行tmux 而不是exec tmux,我可以实现我的目标。但我不喜欢这样,因为我不明白为什么代码使用exec tmux 而不是tmux 并且不想贸然更改它,当我运行tmux 时我应该输入exit 或@ 987654333@ 两次以退出终端。

【问题讨论】:

  • 删除exec是绝对安全的;使用它会导致tmux 替换 shell 采购.bashrc,而这正是你不想想要做的事情。
  • @chepner 谢谢,我要删除exec,这解决了我的问题。

标签: bash terminal tmux


【解决方案1】:

(注意:这个问题真的应该在unix.stackexchange.com 上)。一种简单的解决方案是替换该行

[[ -z "$TMUX" ]] && exec tmux

[[ -z "$TMUX" ]] && { tmux; [ ! -f ~/dontdie ] && exit || rm ~/dontdie; }

这会像以前一样运行 tmux,但是当它退出时会继续测试文件是否存在,~/dontdie。如果该文件不存在,则&& exit 完成并且终端像以前一样关闭。但是,如果您在离开 tmux 之前创建了文件,那么您将执行 || rm ... 部分,该部分会删除文件,并继续执行 .bashrc 文件的其余部分,将您留在 bash shell 中。

因此,要留在终端中,请从 tmux 窗口键入命令:

touch ~/dontdie; exit

而不仅仅是exit,您将退出 tmux 并继续 bash。 为方便起见,您可以将~/.tmux.conf 中的绑定添加到某个键,例如X

bind-key X send-keys 'touch ~/dontdie; exit' Enter

然后您只需输入前缀字符,默认为 Control-B,然后输入 X 以创建文件并退出 tmux。

【讨论】:

  • 除了使用tmux之外,这一切都很好。其实exec tmuxtmux的优缺点是什么?
  • 当你exec tmux你用tmux替换shell进程。当 tmux 退出时,您无法返回 shell,如果 shell 仍在运行,则必须返回到任何启动的 shell。您不要继续执行 exec 之后的 .bashrc 中的行。如果没有 exec,当 tmux 退出时,您会继续执行这些行,并且当 shell 到达 .bashrc 文件的末尾时,它会在您的终端中继续。
  • 使用tmux而不是exec tmux有什么缺点吗,反之亦然?使用tmux 感觉很尴尬,因为我不明白为什么引用使用exec tmux。选择exec tmux 比选择tmux 没有充分的理由吗?
  • 如果对理解有帮助,可以把exec tmux换成tmux; exit,效果一样。在这种情况下使用 exec 的价值在于,shell 不会浪费资源等待 tmux 完成,而此时它要做的就是退出自身。
猜你喜欢
  • 2015-07-14
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2014-10-02
相关资源
最近更新 更多