代码之家  ›  专栏  ›  技术社区  ›  rampion

如果不存在tmux会话,如何创建新的tmux会话

  •  124
  • rampion  · 技术社区  · 14 年前

    我想弄清楚如何连接到 tmux session 如果存在一个命名的tmux会话,如果不存在,我想用给定的名称创建一个新会话。

    tmux 命令可以部分实现我所寻找的,但不清楚如何将它们结合起来,以获得我所寻找的:

    • tmux attach
    • tmux new 创建一个新会话-但它每次都这样做,所以我不能把它留在我的 .tmux.conf
    • tmux has-session 测试会话是否存在-但我不知道如何将它与其他命令缝合在一起

    如何编写自动脚本以创建新的tmux会话(如果给定的会话名称不存在)或附加到会话名称(如果存在)?

    7 回复  |  直到 6 年前
        1
  •  89
  •   Leonid Shevtsov    13 年前

    或者,您可以添加

    new-session
    

    给你的 .tmux.conf -这将在服务器启动时创建默认会话。

    那么 tmux attach 将附加到当前会话(即运行服务器),或创建新会话(启动服务器,读取配置文件,发出 new-session

        2
  •  167
  •   rampion    6 年前

    我想出来了( and had it pointed out to me

    tmux attach || tmux new
    
        3
  •  79
  •   rampion    6 年前

    正如来自 Petr Viktorin jkoelker pjincz mySession 如果存在,如果不存在,则创建:

     tmux new -A -s mySession
    

    man tmux :

    new-session [-AdDEP] [-c start-directory ] [-F format ] [-n window-name ] [-s session-name ] [-t group-name ] [-x width ] [-y height ] [ shell-command ]

    new )

    使用名称创建新会话 .

    [...]

    这个 -A 旗帜制造 表现得像 attach-session 如果 已经存在;在这种情况下, -D 表现得像 -d 附加会话 .

    new-session has supported -A since tmux-1.8 .

        4
  •  15
  •   Anm    12 年前

    # ~/bin/tmux-myproject shell script
    # The Project name is also used as a session name (usually shorter)
    PROJECT_NAME="myproject"
    PROJECT_DIR="~/myproject"
    
    tmux has-session -t $PROJECT_NAME 2>/dev/null
    if [ "$?" -eq 1 ] ; then
        echo "No Session found.  Creating and configuring."
        pushd $PROJECT_DIR
        tmux new-session -d -s $PROJECT_NAME
        tmux source-file ~/bin/tmux-${PROJECT_NAME}.conf
        popd
    else
        echo "Session found.  Connecting."
    fi
    tmux attach-session -t $PROJECT_NAME
    

    tmux-myproject.conf 是我的启动系列tmux命令,用于创建我的窗口和窗格,以及启动我的编辑器。

        5
  •  14
  •   Alex Gaudio    13 年前

    虽然我发现rampion的答案足以使用一个会话,但此脚本允许您设置多个会话:

    SESSIONS="work play"
    
    function has-session {
        tmux has-session -t $1 2>/dev/null
    }
    
    function except 
    {
        if [ "$?" -eq 1 ] ; then
            $1
        fi
    }
    
    # Configure your sessions here
    function session-work
    {
        tmux new-session -d -s work
        tmux neww -k -t work:1
    }
    
    function session-play
    {
        tmux new-session -d -s play
        tmux neww -k -t play:1
    }
    
    #
    #MAIN 
    for x in $SESSIONS
    do
        echo $x
        has-session $x
        except session-$x
    done
    

    -k  --> new-window will not be created if already exists
    -d  --> start session or window, but don't attach to it yet
    -s  --> name the session
    -t  --> specify a target location in the form session:window.pane 
    
        6
  •  9
  •   Dakusan    6 年前

    alias tmuxre='tmux new-session -t default || tmux new-session -s default'
    

    这也类似于跑步 screen -xRR .

        7
  •  2
  •   tinyspark    6 年前

    fish

    tmux attach -t mysesh; or tmux new -s mysesh