我想使用启动时的日期和时间的组合作为 GNU 屏幕日志文件的文件名。在 screenrc 中,如果我输入
logfile '~/log/screen_%H_%m%d%Y_%0c-%t.%n'
我得到一个动态生成的文件,例如
screen_nanna13_06062012_08:03-bash.0
现在我希望屏幕在硬状态栏中显示该文件名。我无法使用
hardstatus string '~/log/screen_%H_%m%d%Y_%0c-%t.%n'
因为只要时间改变,占位符就会更新。
我能想到的解决方案涉及在屏幕启动之前执行的 bash 代码,但这并不好,因为单独的屏幕窗口应该获得自己的动态日志文件。
screen中有变量替换机制吗?
答案1
我找到了使用 screen 命令的解决方案backtick
:
backtick 1 0 0 date +%d%b%Y_%k:%M
logfile '~/log/%H_%1`-%t.%n'
hardstatus string '~/log/%H_%1`-%t.%n'
使用 UNIX date 命令将当前日期/时间加载到 %1` 变量中。唯一的问题是,如果稍后在会话期间创建新窗口,日志文件名称中的日期不会更改(但对我来说,这甚至是一个功能,因为它允许更好地识别相应的日志文件)。
答案2
此命令正是您想要实现的目标,它还会更改日志文件名称中的日期,以防创建新窗口:
backtick 1 1 0 /bin/date +%Y-%m-%d_%k.%M.%S # generate %1`
logfile '~/log/%H_%1`-%t.%n'
hardstatus string '~/log/screenlog_%H_%1`_win.%n.txt'
来源:Screen 手册页
附言。backtick 1 0 0
在版本中根本不起作用。 4.08.00 当我尝试的时候。它只是完全忽略了它。