为了稍微改善我的工作流程,我编写了一些包装脚本,以便在我想要处理项目时自动启动一些命令。但是,当我完成并清理此特定会话的所有 tmux 选项卡时,我想终止一些进程并清理一些文件。
有没有办法在退出 tmux 服务器时自动执行命令?
所需的工作流程:
- 执行命令创建新的 tmux 服务器,打开一些文件,启动一些应用程序
- 在会议中工作
- 稍后再处理
- 重新连接
- 当 tmux 服务器中的所有选项卡都关闭并且服务器被销毁时,执行清理命令
[编辑]我目前使用的脚本:https://github.com/WoLpH/dotfiles/blob/master/bin/tmx
答案1
目前,没有特定的方法可以让 tmux 自动运行由detach
会话中所有窗口触发的命令或关闭会话中的所有窗口。但是,由于您已经有一个包装器脚本(我将称之为tmux_wrapper
)来打开所需的自定义会话,因此您可以轻松地将此脚本转换为自动清理。我自己做了一些非常类似的事情这里,如果我通过 ssh 连接,我想允许嵌套的 tmux 会话。
由于您心中已经有了自定义体验,因此您不再需要tmux attach ....
或类似的命令,因此我假设您总是通过类似 之类的命令启动项目 A 的会话tmux_wrapper A
。在您的包装器中,您可能有一行类似于tmux new-session -s A
。在这里我们可以利用会话名称A
。然后,在包装器的末尾,您可以有一个清理开关,该开关仅在会话不再处于活动状态时激活(即窗口/窗格不再可连接)。
一个简单的例子tmux_wrapper
如下:
#!/bin/sh
sess=$1
# test if the session has windows
is_closed(){
n=$(tmux ls 2> /dev/null | grep "^$sess" | wc -l)
[[ $n -eq 0 ]]
}
# either create it or attach to it
if is_closed ; then
tmux new -s $sess
else
tmux attach -t $sess
fi
# the session is now either closed or detatched
if is_closed ; then
# perform cleanup here ...
fi
像 一样运行它tmux_wrapper A
。现在,当且仅当会话 A 已完全关闭时,才会自动进行清理。