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

Wol*_*lph 4 command-line session-manager tmux session-restore

为了稍微改进我的工作流程,我编写了一些包装脚本来在我想要处理项目时自动启动一些命令。但是,当我完成并清理此特定会话的所有 tmux 选项卡后,我想终止一些进程并清理一些文件。

有没有办法在退出tmux服务器时自动执行命令?

想要的工作流程:

  • 执行命令创建新的 tmux 服务器,打开一些文件,启动一些应用程序
  • 在会议中工作
  • 分离以稍后处理它
  • 重新连接
  • 当 tmux 服务器中的所有选项卡都关闭并且服务器被销毁时,执行清理命令

[编辑]我目前使用的脚本:https : //github.com/WoLpH/dotfiles/blob/master/bin/tmx

sci*_*tor 6

目前,没有特定的方法让 tmux 自动运行由detach会话中的所有窗口触发或关闭的命令。但是,由于您已经有一个tmux_wrapper可以打开所需自定义会话的包装脚本(我将称之为),因此您可以轻松地将此脚本转换为自动清理。我自己在这里做了一些与此非常相似的事情,如果我通过 ssh 附加,我希望允许嵌套的 tmux 会话。

由于您考虑的是自定义体验,因此您不再需要tmux attach ....或类似的命令,因此我假设您总是通过类似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
Run Code Online (Sandbox Code Playgroud)

tmux_wrapper A. 现在,当且仅当会话已完全关闭时,会话 A 的清理才会自动发生。