Tmux使用save-buffer保存缓冲区时如何在文件名中添加当前日期时间?
Tmux save-buffer 文件名追加日期时间失效解决方案
问题根源
tmux 的 #() 命令替换、#{} 格式变量仅在格式字符串类配置项的上下文(如 pane-border-format、status-format 等)中会被自动解析,直接作为普通命令参数传递给 save-buffer 时不会触发展开,因此你写的日期部分返回空值。
解决方案1:直接用run-shell包裹命令(无需额外存变量)
run-shell 执行时会先自动解析所有tmux格式变量和替换,再将命令丢给shell执行,是最简便的实现方式,示例绑定快捷键命令如下:
bind-key s run-shell "mkdir -p $HOME/logs/tmux; capture-pane -S - -E -; save-buffer \"$HOME/logs/tmux/tmux-saved.#{pane_start_command}-$(date +'%b.%d.%Y-%H:%M:%S').log\"; delete-buffer"
这里直接用shell内置的$()替换日期,比tmux的#()兼容性更好。
解决方案2:将日期存到tmux变量后调用
如果需要单独存储日期变量复用,可以通过set-environment实现将shell命令输出存入tmux变量:
- 存储变量命令(默认存在当前会话,加
-g参数可以存为全局变量):tmux set-environment TMUX_SAVE_DATE "$(date +'%b.%d.%Y-%H:%M:%S')" - 后续使用时直接调用
$TMUX_SAVE_DATE即可,完整绑定示例:bind-key C-s run-shell ' mkdir -p $HOME/logs/tmux tmux capture-pane -S - -E - tmux set-environment TMUX_SAVE_DATE "$(date +\"%b.%d.%Y-%H:%M:%S\")" tmux save-buffer "$HOME/logs/tmux/tmux-saved.#{pane_start_command}-$TMUX_SAVE_DATE.log" tmux delete-buffer '
注意事项
- 执行前确保
$HOME/logs/tmux目录存在,示例中已经加了mkdir -p自动创建目录的逻辑,无需手动处理 - 如果
#{pane_start_command}包含空格、特殊字符,参数外层的双引号可以避免文件名被截断
内容的提问来源于stack exchange,提问作者Csaba Balogh
相关产品推荐
相关产品推荐

