将“屏幕”(程序)输出保存到文件

时间:2013-01-08 04:00:24

标签: logging buffer dump gnu-screen

我需要将screen的整个输出保存到文件中以便稍后检查所有内容 原因是我正在通过串口转储闪存,使用屏幕与它连接 我想将它保存到文件中以检查内存结构。

我试过了:

$: screen /dev/ttyUSB0 115200 >> foo.txt
$: screen /dev/ttyUSB0 115200 | tee foo.txt

我也试过在屏幕上使用bufferfile,但我不明白如何使用它。

有简单的方法吗?

11 个答案:

答案 0 :(得分:100)

有一个用于记录的命令行选项。输出保存到screenlog.n文件,其中n是屏幕的编号。 从屏幕的手册页:

  

' - L'告诉屏幕打开窗口的自动输出记录。

答案 1 :(得分:94)

您还可以使用Control-a + H将记录保存到screenlog.n文件中。 还有一个Control-a + H关闭。

C-a H:开始/结束当前窗口到“screenlog.n”文件的记录。

答案 2 :(得分:14)

所选答案在多个会话中不能很好地工作,并且不允许指定自定义日志文件名。

对于多个屏幕会话,这是我的公式:

1)为每个进程创建一个配置文件:

logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on

如果你想这样做"即时#34;,你可以自动更改logfile\012表示"新行",因为使用\n会将其打印在日志文件中:source

2)用" -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)。如果您有这些格式的链接,请在下面发布。

** EXTRA **

如果您想要“#34;即时”#34;,您可以使用此脚本:

#!/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中创建一个日志文件

答案 3 :(得分:13)

for mac terminal:

script -a -t 0 out.txt screen /dev/ttyUSB0 115200 

细节

  • script内置应用程序以“制作终端会话的打字稿”
  • -a附加到输出文件
  • 写入输出文件之间的
  • -t 0时间为0秒,因此每个新char都会更新out.txt
  • out.txt只是输出文件名
  • screen /dev/ttyUSB0 115200 - 来自问题的连接到外部设备的命令

然后您可以使用tail来查看文件正在更新

  

尾巴-100 out.txt

答案 4 :(得分:13)

以下命令适用于屏幕版本4.06.02

ionic cordova plugin add cordova-plugin-facebook4@1.7.4 --variable APP_ID="" --variable APP_NAME=""

从屏幕的手册页:

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed

您可以使用 screen -version 检查现有版本的屏幕。您可以从https://www.gnu.org/software/screen/下载并安装最新的屏幕版本。

答案 5 :(得分:9)

Ctrl + A 然后 Shift + H 适合我。您可以在程序仍在运行时查看文件screenlog.0

答案 6 :(得分:5)

Unix下的'script'命令应该可以解决问题。只需在新控制台启动时运行它就可以了。

答案 7 :(得分:4)

以下内容可能有用(测试:Linux / Ubuntu 12.04):

cat /dev/ttyUSB0

使用上述内容,您可以执行所需的所有重定向。例如,要在保存到文件的同时将输出转储到控制台,您可以执行以下操作:

cat /dev/ttyUSB0 | tee console.log

答案 8 :(得分:4)

如果您需要从已经运行的屏幕上保存整个回滚缓冲区的输出,则可以使用另一个答案:

Ctrl-a [ g SPACE G $ >.

这会将您的整个缓冲区保存到/ tmp / screen-exchange

答案 9 :(得分:4)

现有屏幕日志可以通过以下方式保存:

Ctrl + A 硬拷贝-h文件名

答案 10 :(得分:3)

这是一个技巧:将其包装在sh -c中!

screen sh -c './some-script 2>&1 | tee mylog.log'

2>&1将stderr重定向到stdout,以便tee可以捕获并记录错误消息。