创build会话如果不存在

我正在使用gnu-screen切换到tmux ,而我仍然试图围绕着变化包裹我的头。

我希望能够做的一件事是启动tmux ,并自动连接到一个会话,如果存在,否则创build一个新的会话。

  • tmux attach附加到一个自动存在的会话 – 但是如果没有会话存在就会出错
  • tmux new创build了一个新的会话 – 但是每次都这样做,所以我不能把它留在我的.tmux.conf
  • tmux has-sessiontestingtmux has-session是否存在 – 但我不知道如何将它与其他命令拼接在一起

任何人都可以给我一些configuration文件的build议?

或者,您可以添加

 new-session 

到你的.tmux.conf – 这将在服务器启动时创build一个默认的会话。

然后, tmux attach将连接到当前会话(即运行服务器),或者创build一个新的会话(启动服务器,读取configuration文件,发出new-session命令)并附加到该new-session

我明白了( 并且指出了这一点 )。

 tmux attach || tmux new 

虽然我发现rampion的答案足以使用1个会话,但是这个脚本可以让你设置多个会话:

 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 

调整亚历克斯的build议,在启动时包含基于项目的configuration,我开始使用以下内容:

 # ~/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命令来创build我的窗口和窗格,以及启动我的编辑器。

如果需要,我使用别名来创build一个新会话,如果它已经存在,则附加到我的默认会话:

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

我把这个添加到我的服务器上的.login。

我这样做的原因是因为我不想附加到相同的实际会话,我想要一个新的会话使用相同的一组窗口。

这也与运行screen -xRR类似。