screenrc 中动态生成的日志文件显示在 Hardstatus 中

screenrc 中动态生成的日志文件显示在 Hardstatus 中

我想使用启动时的日期和时间的组合作为 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 当我尝试的时候。它只是完全忽略了它。

相关内容