创build会话如果不存在
我正在使用gnu-screen
切换到tmux
,而我仍然试图围绕着变化包裹我的头。
我希望能够做的一件事是启动tmux
,并自动连接到一个会话,如果存在,否则创build一个新的会话。
-
tmux attach
附加到一个自动存在的会话 – 但是如果没有会话存在就会出错 -
tmux new
创build了一个新的会话 – 但是每次都这样做,所以我不能把它留在我的.tmux.conf
-
tmux has-session
testingtmux 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
类似。