Bash,在 tmux 进程被杀死后意外退出服务器。

3

我编写了一个Bash脚本来加载自定义的tmux会话。

我发现,因为窗口有一个名称,所以无法再次使用该脚本,因为窗口名称已经存在。我想,与其给窗口一个随机数作为名称,或者根本不给它命名,还不如直接杀死进程更简单。

#!/bin/sh

pkill -f tmux

tmux new-session -s "Tab 1"\; \
  split-window -v \; \
  split-window -h \;  \
  split-window -v \;  

那么,当我使用该脚本时,它会在创建tmux会话之前终止tmux进程。 我注意到,如果tmux会话已经打开,它会将其关闭,但不会打开另一个会话。相反,它会抛出这个错误信息。

server exited unexpectedly

我必须使用两次命令才能使其正常运行。

有没有一种方法可以执行脚本一次并杀死当前会话,然后打开一个新的会话?谢谢!


使用 tmux new-session -A -s "Tab 1" 是否有帮助?它可以让“新会话的行为像是附加到已存在的会话一样...” - mattb
1个回答

0

我不确定这是否是最佳方法,但从查看man tmux中,我找到了tmux detach-client命令:

如果绑定到键、使用-t指定的客户端或所有当前连接到-s指定的会话的客户端,则分离当前客户端。-a选项杀死除使用-t给出的客户端之外的所有客户端。如果给出-P,则向客户端的父进程发送SIGHUP,通常导致其退出。使用-E,运行shell-command以替换客户端。

这里有用的是-E选项。我们可以使用它来杀死当前会话并使用您想要的选项启动新会话。

一种单行解决方案(如果您在tmux内):

tmux detach-client -E "tmux kill-session; tmux new-session -s 'Tab 1'\; split-window -v\; \; split-window -v \; split-window -h"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接