有什么方法可以保存tmux会话吗?换句话说,如果我重新启动计算机,是否总是会丢失会话?
*** System restart required ***
有什么方法可以保存tmux会话吗?换句话说,如果我重新启动计算机,是否总是会丢失会话?
*** System restart required ***
Answers:
是的,如果重新启动计算机,则会丢失会话。会话无法保存。但是,可以编写脚本。实际上,大多数操作是编写一些会话脚本,以便您可以重新创建它们。例如,下面是创建会话的简单shell脚本:
#!/bin/zsh
SESSIONNAME="script"
tmux has-session -t $SESSIONNAME &> /dev/null
if [ $? != 0 ]
then
tmux new-session -s $SESSIONNAME -n script -d
tmux send-keys -t $SESSIONNAME "~/bin/script" C-m
fi
tmux attach -t $SESSIONNAME
这就是它的作用。首先,它使用tmux has-session检查该名称是否已经存在任何会话(在这种情况下,原始名称为“ script”)。它检查返回码。如果已经有一个具有该名称的正在进行的会话,则它将跳过“ if”循环,而直接转到最后一行,它将附加到会话上。否则,它将创建一个会话并向其发送一些密钥(目前仅运行随机脚本)。然后退出“ if”块并附加。
这是一个非常琐碎的示例。附加之前,您可以创建多个窗口,窗格等。
这会不会是你问同样的事情,但。如果您对会话进行了任何更改,例如,您重命名了一个窗口并在其中创建了一个新窗格,如果重新启动,这些更改当然不会被保存。
有一些工具可以简化脚本编写会话的过程,尽管我更喜欢手动操作(我认为它更通用)。这些工具是Tmuxinator和Teamocil。
我的主要信息来源是Tmux的《实用书架》一书。
tmux send-keys ...
行的目的是什么?
some command; if [ $? != 0 ]; then .....
更易于编写(和阅读)为:if ! some command; then .....
。
我写了一个简单的bash脚本,在每个脚本中都保留了打开的tmux会话,窗口和当前工作目录。
如此手动或定期从cron调用它(因为您可能会忘记):
tmux-session save
它将写入~/.tmux-session
。重新启动后还原它们,如下所示:
tmux-session restore
我发现它比数百行长的Perl脚本好得多。
我写了一个tmux插件,使您可以保存完整的tmux环境并在以后还原它。它努力做到非常详细,使您有永不退出tmux的感觉。
https://github.com/tmux-plugins/tmux-resurrect
更新:现在有一个tmux-continuum插件,可以执行tmux环境的自动后台保存。(可选)它还可以*自动*在计算机重启后自动恢复tmux env。
tmuxinator是用Ruby编写的工具,可用于轻松创建和管理tmux会话。它可用于创建项目,以后可将其实例化为tmux会话。
我成功使用https://github.com/jimeh/tmuxifier重新创建了会话。只需使用git,就可以不使用ruby进行安装。
样本很容易说明,例如:https : //github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh