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

Edo*_*doo 111 logging buffer dump gnu-screen

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

我试过了 :

$: screen /dev/ttyUSB0 115200 >> foo.txt
$: screen /dev/ttyUSB0 115200 | tee foo.txt
Run Code Online (Sandbox Code Playgroud)

我也试过从屏幕上使用缓冲区文件,但我不明白如何使用它.

有一个简单的方法吗?

Fer*_*gie 109

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

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

  • 只是google了一下..这是我的回答评论的答案 - http://stackoverflow.com/questions/4807474/copying-gnu-screen-scrollback-buffer-to-file-extended-hardcopy Ctrl + A和:得到到命令模式,然后硬拷贝-h <filename>以防其他人需要这个. (35认同)
  • 谢谢.有没有办法输出其输出缓冲区中已有的屏幕?例如,我忘了启用日志记录,但滚动屏幕缓冲区中有输出 - 如何将其写入文件? (6认同)
  • 日志文件将在执行屏幕的同一目录中创建。 (3认同)
  • 昨天我做了一个“screen -L”,断开了我的SSH会话,今天再次登录并使用“screen -r”(我只有一个)重新连接,退出,并做了一个`find / -name“screen*log”`什么也没找到。 (2认同)
  • 相关:[是否可以从L标志中命名屏幕日志文件?](http://stackoverflow.com/questions/15026184/is-it-possible-to-name-the-screen-logfile-from-the- 1-标志) (2认同)

小智 95

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

Ca H:开始/结束当前窗口到文件"screenlog.n"的记录.

  • +1.如果无法创建日志,请尝试更改屏幕窗口的工作目录:Ctrl-`a` +`:`并键入例如`chdir/home/foobar/baz` (5认同)
  • Ca + H只为我切换屏幕窗口.与日志文件无关! (2认同)
  • @aaa90210 它是 ctrl-a,然后单独按 h 以获得硬拷贝。ctrl-a 然后单独按下 shift-h 启动一个完整的日志文件。 (2认同)

lep*_*epe 18

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

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

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

logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on
Run Code Online (Sandbox Code Playgroud)

如果您想"动态"执行此操作,则可以logfile自动更改. \012表示"新行",因为使用\n它会将其打印在日志文件:source.

2)使用"-c"和"-L"标志启动命令:

screen -c ./test.conf -dmSL 'Test' ./test.pl
Run Code Online (Sandbox Code Playgroud)

而已.第一次刷新后你会看到"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 ]
...
Run Code Online (Sandbox Code Playgroud)

我发现即使配置文件中有"登录",仍然需要"-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
Run Code Online (Sandbox Code Playgroud)

要使用它,请保存它(screen.sh)并设置+ x权限:

./screen.sh TEST ./test.pl
Run Code Online (Sandbox Code Playgroud)

...并将执行./test.pl并在/var/log/TEST.log中创建一个日志文件

  • 谢谢 - `on-the-fly` 部分非常有用。 (2认同)

小智 15

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

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed
Run Code Online (Sandbox Code Playgroud)

从屏幕的手册页:

-Logfile file : By default logfile name is "screenlog.0". 
                You can set new logfile name with the "-Logfile" option.
Run Code Online (Sandbox Code Playgroud)

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


rya*_*yan 14

对于mac终端:

script -a -t 0 out.txt screen /dev/ttyUSB0 115200 
Run Code Online (Sandbox Code Playgroud)

细节

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

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

尾巴-100 out.txt


jag*_*oft 10

Ctrl+A然后Shift+H为我工作.您可以screenlog.0在程序仍在运行时查看该文件.


小智 7

如果您需要从已经运行的屏幕中保存整个回滚缓冲区的输出,则有一个不同的答案:

Ctrl-a [ g SPACE G $ >.
Run Code Online (Sandbox Code Playgroud)

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

  • 这篇文章[1]提供了一个更简单的解决方案:`Ctrl + a`,然后`:`进入命令模式,然后`hardcopy -h &lt;filename&gt;` 1. /sf/answers/462300751/ 1734789 (4认同)

rko*_*kok 6

这是一个技巧:把它包起来sh -c

screen sh -c './some-script 2>&1 | tee mylog.log'
Run Code Online (Sandbox Code Playgroud)

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


Rub*_*ben 5

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


Keo*_*ope 5

以下可能有用(测试:Linux/ Ubuntu 12.04 (Precise Pangolin)):

cat /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

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

cat /dev/ttyUSB0 | tee console.log
Run Code Online (Sandbox Code Playgroud)


Rat*_*Raj 5

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

Ctrl+A : 硬拷贝 -h 文件名