tmux attach
我可以附加到正在运行的会话,但是如果没有正在运行的会话,则只会出现错误
no sessions
如果没有任何会话在运行,如何自动启动新会话?像
tmux attach-or-create-new-session
#1 楼
答案要简单得多。只需将其放入您的~/.tmux.conf
文件中即可:# if run as "tmux attach", create a session if one does not already exist
new-session -n $HOST
如果运行
tmux attach
并有一个会话,那么它将附加到该会话(无论是否已附加) 。如果还没有会话,那么它将为您创建一个会话。评论
这是一个巧妙的技巧,但有一个警告:如果在不带参数的情况下调用tmux,它将创建一个新会话,然后在〜/ .tmux.conf中到达此行时立即创建第二个会话。创建第一个会话后,通过执行tmux ls可以看到此问题。实际上,将其放入文件后,您将无法再调用无参数的tmux
–布鲁诺·波拉科(Bruno Polaco)
2014年11月23日23:35
因此,您必须添加一个别名别名tmux =“ tmux attach”来防止此问题
–rubo77
15年3月21日在15:07
@BrunoPolaco:什么是最大的警告,始终有一个额外的空tmux会话运行(除此之外,它在任务列表中看起来并不整洁)?
–rubo77
16-09-26在3:14
@ rubo77资源。有些人在启动tmux时会创建一些默认工具,窗口,窗格等。
–rovr138
17 Mar 24 '17 at 17:05
#2 楼
如果可以命名您的会话,那么使用new-session
命令很容易: 从
main
开始:如果会话名称已经存在,则
man tmux
标志使-A
的行为类似于new-session
;在这种情况下,attach-session
的行为类似于-D
到-d
。请注意,自2013年3月26日起,tmux版本
attach-session
中引入了-A
选项,对于早期版本,请使用1.8
。评论
+1,用于使用内置功能并提供人工文档摘要
–阿里·帕特里克(Ari Patrick)
15年3月21日在14:10
在我的别名列表中:别名“ tmux-attach-或-create-main-session = tmux new-session -A -s main”。谢谢你的提示!手册页:openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
– Jeroen Wiert Pluimers
15-10-14在10:40
tmux:未知选项-A这似乎仅在最新版本中可用。
– xApple
16 Mar 26 '16 at 18:15
[-z“ $ TMUX”] && exec tmux new -As。这就是我在.bashrc中使用的。
–ryenus
17年11月24日在3:26
如果通常只使用一个会话,则默认名称为0,因此您可以执行以下操作:tmux new-session -A -s 0。
– Ciro Santilli郝海东冠状病六四事件法轮功
19年3月31日在12:19
#3 楼
如果attach出现错误,这将启动一个新会话:tmux attach || tmux new
因此别名将完成这项工作:
tm="tmux attach || tmux new"
评论
您甚至可以通过将tmux附件更改为tmux a来使其更短
–布鲁诺·波拉科(Bruno Polaco)
2014年11月24日10:46
虽然这是可行的,但Wesley Baugh的解决方案使用tmux的内置功能来完成相同的操作
–阿里·帕特里克(Ari Patrick)
2015年3月21日14:08
以前-在引入-A(例如v1.6)之前,这似乎是旧版本的最佳答案
–克里斯托弗·彼得森(Christopher Peterson)
19年1月16日在14:35
#4 楼
考虑将以下内容添加到您的.bashrc
中if [ -z "$TMUX" ]; then
base_session='my_session'
# Create a new session if it doesn't exist
tmux has-session -t $base_session || tmux new-session -d -s $base_session
# Are there any clients connected already?
client_cnt=$(tmux list-clients | wc -l)
if [ $client_cnt -ge 1 ]; then
session_name=$base_session"-"$client_cnt
tmux new-session -d -t $base_session -s $session_name
tmux -2 attach-session -t $session_name \; set-option destroy-unattached
else
tmux -2 attach-session -t $base_session
fi
fi
您可以在我的github repo的ZSH资源文件中看到我的使用情况
#5 楼
为了扩展Wesley Baugh的答案(登录时在.bashrc中使用时对我来说是双重嵌套会话)并增加一点灵活性,因为我经常在服务器上使用sudo -s
(这将再次忠实地加载.bashrc和双嵌套),这是我的.bashrc文件中的内容:if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
tmux new-session -A -s main
fi
这会检查tmux会话,并确保您不是超级用户,然后再创建新会话或将其附加到现有会话一个名为
main
。#6 楼
Drew Frank在这里回答了这个问题:https://superuser.com/questions/487363/tmux-equivalent-of-screen-r这里是我现在用于此的脚本(尽管我已经切换了由于tmux的另一个问题而返回屏幕)
/somewhere/on/your/path/ttmux
或作为shell函数:#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2
-2
选项使tmux假定支持256色端子,因此可能不支持适合您的情况。#7 楼
如果您在.shrc文件中使用此文件或与exec
类似的文件,我建议if tmux ls
exec tmux attach
else
exec tmux
fi
评论
有关更深入的示例,请参见github.com/aaronjameslang/dotfiles/blob/master/.zshrc
–亚伦·J·朗(Aaron J Lang)
16-11-22在11:38
不只是tmux && exec tmux attach ||的等效项exec tmux?
– Pablo A
20-05-28在6:06
#8 楼
我对@SuperMagic的回答有所改进。我将此块放在我的.zshrc
的顶部if [[ $TMUX = "" ]]; then
# try to reattach sessions
tmux ls | grep -vq attached && TMUXARG="attach-session -d"
exec eval "tmux -2 $TMUXARG"
fi
#9 楼
我确实创建了此功能,希望对您有所帮助!tm() {
local targetSession=""
local DEFAULT_SESSION="main"
[ -z "$targetSession" ] && targetSession="$DEFAULT_SESSION"
tmux attach-session -t "$targetSession">/dev/null 2>&1 || \
tmux new -s "$targetSession">/dev/null 2>&1
}
# If any, complete with a list of current tmux sessions
complete -C "tmux ls 2>&1 | cut -d':' -s -f1" tm
#10 楼
这是此博客的替代解决方案。 session="main"
# Check if the session exists, discarding output
# We can check $? for the exit status (zero for success, non-zero for failure)
tmux has-session -t $session 2>/dev/null
if [ $? != 0 ]; then
# Set up your session
fi
# Attach to created session
tmux attach-session -t $session
摘自手册页
has-session [-t target-session] (alias: has)
Report an error and exit with 1 if the specified session does not exist.
If it does exist, exit with 0.
评论
相关:stackoverflow.com/questions/3432536/…