不依赖 .screenrc 为屏幕输出指定日志名称

Phi*_*ayo 8 command-line-interface logging color gnu-screen

在 Bash 脚本中,我使用“screen -L”以彩色记录执行的命令。例如:

screen -L tree
Run Code Online (Sandbox Code Playgroud)

然后我们读取日志文件less -R

执行此脚本时,其他屏幕可能正在运行,因此我们不知道哪个 screenlog.* 包含我们的输出。我不能要求用户自定义他/她的.screenrc.

有没有办法在命令行上指定日志名称或读取特定.screenrc命令?

Phi*_*ack 14

我对此有一些想法。首先,请注意您可以在通过-c命令行开关调用 screen 时控制启动 screenrc 。其次,您可以在 .screenrc 中使用环境变量。将所有这些放在一起,这是一个 shell 脚本,可以执行您想要的操作:

#!/bin/bash

cat << EOF >/tmp/screenrc.$$
logfile /tmp/screenlog.$$
EOF

screen -c /tmp/screenrc.$$ -L
rm /tmp/screenrc.$$

echo "logfile is /tmp/screenlog.$$"
Run Code Online (Sandbox Code Playgroud)

该脚本覆盖用户 screenrc 并将输出放在特定文件中。在这种情况下,我使用$$通过附加脚本进程名称来生成文件名。请注意,您通常应该使用mktemp来创建安全的临时文件,但我现在很懒。

这也完全取代了用户.screenrc。如果您仍想从该文件中读取设置,您应该将生成的配置文件更改为如下内容:

logfile /tmp/screenlog.$$
source $HOME/.screenrc
Run Code Online (Sandbox Code Playgroud)