系统重启,tmux会话就会丢失,需要重开tmux,不爽,于是去问Google大神怎么办,得到一个手动保存和恢复的方法。源于:http://superuser.com/a/615716。
该方法作者在他的github库中提供了很多脚本,我只取相关的tmux-seesion脚本拿来用用,具体使用方法如下:
1.新建一个用户专用的命令目录/Users/yourusername/bin(比如我的是 /Users/EternalSun/bin)
#新建命令目录
mkdir /Users/EternalSun/bin
#将下面的语句加入到 ~/.bash_profile (使用zsh的,则为 ~/.zshrc)
export PATH=$PATH:/Users/EternalSun/bin
#设置可执行权限
chmod -R u+x /User/EternalSun/bin
brew install reattach-to-user-namespace
2.保存脚本到该目录,文件名为tmux-session,完整路径为 /Users/EternalSun/bin/tmux-session。
脚本内容如下:
#!/usr/bin/env bash
# Save and restore the state of tmux sessions and windows.
# TODO: persist and restore the state & position of panes.
set -e
dump() {
local d=$'\t'
tmux list-windows -a -F "#S${d}#W${d}#{pane_current_path}"
}
save() {
dump > ~/.tmux-session
}
terminal_size() {
stty size 2>/dev/null | awk '{ printf "-x%d -y%d", $2, $1 }'
}
session_exists() {
tmux has-session -t "$1" 2>/dev/null
}
add_window() {
tmux new-window -d -t "$1:" -n "$2" -c "$3"
}
new_session() {
cd "$3" &&
tmux new-session -d -s "$1" -n "$2" $4
}
restore() {
tmux start-server
local count=0
local dimensions="$(terminal_size)"
while IFS=$'\t' read session_name window_name dir; do
if [[ -d "$dir" && $window_name != "log" && $window_name != "man" ]]; then
if session_exists "$session_name"; then
add_window "$session_name" "$window_name" "$dir"
else
new_session "$session_name" "$window_name" "$dir" "$dimensions"
count=$(( count + 1 ))
fi
fi
done < ~/.tmux-session
echo "restored $count sessions"
}
case "$1" in
save | restore )
$1
;;
* )
echo "valid commands: save, restore" >&2
exit 1
esac
3.保存和恢复会话的使用方式:
#会话信息会保存到 ~/.tmux-session
#手动保存可能会遗忘,可以加入cron定时任务自动保存
tmux-session save
#系统重启后,恢复:
tmux-session restore
4.设置定时任务自动保存会话信息
crontab -e
30 * * * * tmux-session save
5.设置tmux配置
vim ~/.tmux.conf
setw -g mode-key vi
set-option -g status off
bind-key b set-option status
set -g default-terminal "screen-256color"
set -g default-command "reattach-to-user-namespace -l bash"