【问题标题】:How to detect if tmux is attached to a session in bash?如何检测 tmux 是否附加到 bash 中的会话?
【发布时间】:2019-03-29 23:04:08
【问题描述】:

我有一个.sh 文件,它为 tmux 创建了一个新会话并添加了一些窗口,该文件应仅在不存在会话时使用。例如:

tmux new-session -A -s `ax` -n ui -d
# add windows and other magic here...

我想防止创建具有相同名称的会话并重新创建窗口,以防意外重新执行 .sh 文件并且会话正在运行。

基本上我需要的是:

如果不存在具有该会话名称的 tmux 会话 ax,则创建该会话。如果 我没有附加到 tmux 会话,附加到该会话。

我想知道如何检测 tmux 会话是否存在以及是否附加了 tmux,在此示例中,ax 正在运行并阻止.sh 脚本的执行,或者会话是否不退出我想重新执行.sh 脚本。

目前我正在考虑使用:

tmux ls | grep attached

我想知道你是否知道更好的方法。

【问题讨论】:

    标签: bash tmux


    【解决方案1】:

    您可以使用$TMUX 来检测是否已附加,我的代码是:

    if [ ! "$TMUX" ]; then
            tmux attach -t main || tmux new -s main
    fi
    

    【讨论】:

      【解决方案2】:

      有点难以理解你的意思。我将其解释为

      如果不存在具有该会话名称的 tmux 会话,请创建它。如果我没有附加到 tmux 会话,请附加到该会话名称。

      如有错误,请评论。

      我的脚本中有类似的功能。我所做的只是

      tmuxstart() {
          tmux ls | grep "sess" && { tmux a -t sess; return 0; }
          #rest of tmux script to create session named "sess"
          tmux a -t sess
      }
      

      如果名为“sess”的会话存在,那么我在该行上执行接下来的 2 个分组命令(附加到它并退出函数)。

      请注意,我确实必须检查我是否已经附加到该函数。 tmux 会自动执行此操作。如果您在会话中尝试附加到 tmux 会话,它将响应

      sessions should be nested with care, unset $TMUX to force
      

      而不是递归附加。 Tmux 足够聪明,可以防止我们在脚下开枪。

      【讨论】:

        猜你喜欢
        • 2014-07-28
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多