如果我使用
tmux attach
Run Code Online (Sandbox Code Playgroud)
我可以附加到正在运行的会话,但如果没有运行会话,我只会收到错误
no sessions
Run Code Online (Sandbox Code Playgroud)
如果没有运行,如何自动启动新会话?就像是
tmux attach-or-create-new-session
Run Code Online (Sandbox Code Playgroud)
小智 223
如果命名会话没问题,那么使用以下new-session命令很容易:
tmux new-session -A -s main
Run Code Online (Sandbox Code Playgroud)
main如果需要,将附加到或创建的会话名称在哪里。
来自man tmux:
该
-A标志使new-session行为很像attach-session,如果会话的名称已经存在; 在这种情况下,-D行为就像-d到attach-session。
这可以缩短为依赖默认会话名称(即0):
tmux new -As0
Run Code Online (Sandbox Code Playgroud)
另请注意,该-A选项于2013 年 3 月 26 日在tmux 版本1.8中引入。对于早期版本,请使用:
tmux attach || tmux
Run Code Online (Sandbox Code Playgroud)
小智 72
答案要简单得多。只需将其放入您的~/.tmux.conf文件中:
# if run as "tmux attach", create a session if one does not already exist
new-session -n $HOST
Run Code Online (Sandbox Code Playgroud)
如果您运行tmux attach并且有一个会话,那么它将附加到该会话(无论它是否已经附加)。如果还没有会话,那么它会为您创建一个。
rub*_*o77 45
如果 attach 出现错误,这将启动一个新会话:
tmux attach || tmux new
Run Code Online (Sandbox Code Playgroud)
所以别名将完成这项工作:
tm="tmux attach || tmux new"
Run Code Online (Sandbox Code Playgroud)
如果您在 .shrc 文件或类似文件中使用它,exec我建议
if tmux ls &> /dev/null; then
exec tmux attach
else
exec tmux
fi
Run Code Online (Sandbox Code Playgroud)
小智 5
为了扩展 Wesley Baugh 的答案(在登录时在 .bashrc 中使用时对我来说是双重嵌套会话)并增加一点灵活性,因为我经常sudo -s在服务器上使用(这会尽职尽责地再次加载我的 .bashrc 并双重嵌套),这里是我的 .bashrc 中有什么:
if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
tmux new-session -A -s main
fi
Run Code Online (Sandbox Code Playgroud)
这会检查 tmux 会话并确保您在创建新会话或附加到名为main.