我试图找出如何附加到一个tmux session
命名的tmux会话,如果不存在,我想创建一个具有给定名称的新会话.
目前,我知道一些tmux
命令可以部分实现我正在寻找的东西,但不清楚如何将它们组合在一起以获得我想要的东西:
tmux attach
附加到自动存在的会话 - 但如果不存在会话则会出错tmux new
创建一个新的会话 - 但它每次都这样做,所以我不能把它留在我的 .tmux.conf
tmux has-session
测试会话是否存在 - 但我不知道如何将其与其他命令拼接在一起因此,我想创建一个tmux脚本,以便自动发生,而不必每次我需要登录会话时手动创建它.
如何编写自动脚本以创建新的tmux会话(如果给定的会话名称不存在)或附加到会话名称(如果存在)?
ram*_*ion 157
我弄明白了(并指出了我).
tmux attach || tmux new
Run Code Online (Sandbox Code Playgroud)
Leo*_*sov 87
或者,您可以添加
new-session
Run Code Online (Sandbox Code Playgroud)
到你的.tmux.conf
- 这将在服务器启动时创建一个默认会话.
然后tmux attach
将附加到当前会话(运行服务器,即),或创建一个新会话(启动服务器,读取配置文件,发出new-session
命令)并附加到该会话.
alp*_*989 51
正如Petr Viktorin,jkoelker和pjincz的评论中指出的那样,mySession
如果它存在,您可以使用以下命令附加到它,如果不存在则创建它:
tmux new -A -s mySession
Run Code Online (Sandbox Code Playgroud)
来自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
)使用名称创建新会话
session-name
.[...]
该
-A
标志使new-session
行为类似attach-session
,如果session-name
已经存在; 在这种情况下,-D
行为就像-d
到attach-session
.
Ale*_*dio 14
虽然我发现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
Run Code Online (Sandbox Code Playgroud)
注意:
-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
Run Code Online (Sandbox Code Playgroud)
Anm*_*Anm 13
在启动时调整Alex的建议以包括基于项目的配置,我开始使用以下内容:
# ~/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
Run Code Online (Sandbox Code Playgroud)
tmux-myproject.conf
我的启动系列tmux命令在哪里创建我的窗口和窗格,以及启动我的编辑器.
如果需要,我使用别名创建新会话,如果已存在,则附加到我的默认会话:
alias tmuxre='tmux new-session -t default || tmux new-session -s default'
Run Code Online (Sandbox Code Playgroud)
我把它添加到我服务器上的.login中.
我这样做的原因是因为我不想附加到同一个实际会话,我想要一个使用同一组窗口的新会话.
这也类似于跑步screen -xRR
.