如何检测tmux是否已连接到bash中的会话?

时间:2019-03-29 23:04:09

标签: bash tmux

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

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

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

基本上我需要的是:

  

如果该会话名称不存在tmux会话斧头,请创建该会话。如果   我没有加入tmux会话,请附加到该会话。

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

当前我正在考虑使用:

tmux ls | grep attached

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

2 个答案:

答案 0 :(得分:1)

很难理解您的意思。我将其解释为

  

如果使用该会话名称的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足够聪明,可以防止我们用脚射击。

答案 1 :(得分:0)

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

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