如何在 tmux 服务器/会话退出时执行清理命令?

如何在 tmux 服务器/会话退出时执行清理命令?

为了稍微改善我的工作流程,我编写了一些包装脚本,以便在我想要处理项目时自动启动一些命令。但是,当我完成并清理此特定会话的所有 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 已完全关闭时,才会自动进行清理。

相关内容