我需要将Screen的整个输出保存到一个文件中,以便以后检查所有内容。
原因是我要通过串行端口转储闪存,并使用Screen与之交互。我想将其保存到文件中以检查内存结构。
我试过了:
$: screen /dev/ttyUSB0 115200 >> foo.txt
$: screen /dev/ttyUSB0 115200 | tee foo.txt
而且我也尝试过从屏幕上使用bufferfile,但我不知道如何使用它。
有没有简单的方法?
我需要将Screen的整个输出保存到一个文件中,以便以后检查所有内容。
原因是我要通过串行端口转储闪存,并使用Screen与之交互。我想将其保存到文件中以检查内存结构。
我试过了:
$: screen /dev/ttyUSB0 115200 >> foo.txt
$: screen /dev/ttyUSB0 115200 | tee foo.txt
而且我也尝试过从屏幕上使用bufferfile,但我不知道如何使用它。
有没有简单的方法?
Answers:
有一个用于记录日志的命令行选项。输出将保存到screenlog.n文件,其中n是屏幕编号。从屏幕的手册页:
'-L'告诉屏幕以打开窗口的自动输出日志记录。
find / -name "screen*log"
发现任何结果。
您也可以使用Control-a + H将日志记录保存到screenlog.n文件中。再按一次Control-a + H键即可关闭。
Ca H:开始/结束将当前窗口记录到文件“ screenlog.n”。
a
+ :
并键入例如chdir /home/foobar/baz
所选答案不适用于多个会话,并且不允许指定自定义日志文件名。
对于多个屏幕会话,这是我的公式:
为每个过程创建一个配置文件:
logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on
如果您想“即时”执行此操作,则可以logfile
自动更改。
\012
表示“换行”,因为使用\n
会将其打印在日志文件:source上。
使用“ -c”和“ -L”标志启动命令:
screen -c ./test.conf -dmSL 'Test' ./test.pl
而已。第一次刷新后,您将看到“ test.log”:
...
6 Something is happening...
[ test.pl: 2016-06-01 13:02:53 ]
7 Something else...
[ test.pl: 2016-06-01 13:02:54 ]
8 Nothing here
[ test.pl: 2016-06-01 13:02:55 ]
9 Something is happening...
[ test.pl: 2016-06-01 13:02:56 ]
10 Something else...
[ test.pl: 2016-06-01 13:02:57 ]
11 Nothing here
[ test.pl: 2016-06-01 13:02:58 ]
...
我发现即使配置文件上有“登录”,仍然需要“ -L”。
我找不到屏幕使用的时间格式变量(如%m)的列表。如果您有这些格式的链接,请在下面将其发布。
如果您想“即时”执行此操作,可以使用以下脚本:
#!/bin/bash
if [[ $2 == "" ]]; then
echo "Usage: $0 name command";
exit 1;
fi
name=$1
command=$2
path="/var/log";
config="logfile ${path}/${name}.log
logfile flush 1
log on
logtstamp after 1
logtstamp string \"[ %t: %Y-%m-%d %c:%s ]\012\"
logtstamp on";
echo "$config" > /tmp/log.conf
screen -c /tmp/log.conf -dmSL "$name" $command
rm /tmp/log.conf
要使用它,请保存它(screen.sh)并设置+ x权限:
./screen.sh TEST ./test.pl
...并执行./test.pl并在/var/log/TEST.log中创建一个日志文件
on-the-fly
部分非常有用。
screen -r
具有"Unable to open "/tmp/log.conf"
。此外,屏幕从[detached]
状态变为不存在。可能是什么问题?
screen bash
。如果有任何其他进程正在杀死您的屏幕,则应将其列为“已死”,但不会消失。我不确定会是什么。
以下命令适用于Screen版本4.06.02:
screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed
-Logfile file : By default logfile name is "screenlog.0".
You can set new logfile name with the "-Logfile" option.
您可以使用screen- version检查Screen的现有版本。您可以从https://www.gnu.org/software/screen/下载并安装最新的Screen版本。
对于Mac终端:
script -a -t 0 out.txt screen /dev/ttyUSB0 115200
script
:一个内置应用程序,用于“制作终端会话的打字稿”-a
:追加到输出文件-t 0
:写入输出文件之间的时间为0秒,因此out.txt为每个新字符更新out.txt
:只是输出文件名screen /dev/ttyUSB0 115200
:来自问题的命令用于连接到外部设备然后,您可以使用tail来查看文件是否正在更新。
tail -100 out.txt
Ctrl+A然后Shift+H为我工作。您可以screenlog.0
在程序仍在运行时查看该文件。
Unix下的'script'命令应该可以解决问题。只需在新控制台的开头运行它,就可以了。
以下可能有用(在Linux / Ubuntu 12.04(精确的穿山甲)上测试):
cat /dev/ttyUSB0
使用以上内容,您便可以进行所需的所有重定向。例如,要在将输出保存到文件的同时将其输出到控制台,您可以执行以下操作:
cat /dev/ttyUSB0 | tee console.log
如果您需要从已经运行的屏幕上保存整个回滚缓冲区的输出,则可以使用其他答案:
Ctrl-a [ g SPACE G $ >.
这会将您的整个缓冲区保存到/ tmp / screen-exchange
现有的屏幕日志可以通过以下方式保存:
Ctrl+A : 硬拷贝-h文件名