Save “screen” (program) output to a file

2019-01-12 20:01发布

I need to save the whole output of screen to a file to check later all the content.
The reason is that I'm dumping a flash memory trough serial port, using screen to interface with it.
I would like to save it to a file to check memory structure.

I've tried :

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

and I've also tried to use bufferfile from screen, but I don't understand how to use it.

Is there an easy way?

9条回答
Ridiculous、
2楼-- · 2019-01-12 20:36

for mac terminal:

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

details

  • script built in app to "make a typescript of terminal session"
  • -a append to output file
  • -t 0 time between writing to output file is 0 seconds, so out.txt is updated for every new char
  • out.txt is just the output file name
  • screen /dev/ttyUSB0 115200 - command from question for connecting to external device

you can then use tail to see that the file is updating

tail -100 out.txt

查看更多
你好瞎i
3楼-- · 2019-01-12 20:37

The selected answer doesn't work quite well with multiple sessions and doesn't allows to specify a custom log file name.

For multiple screen sessions, this is my formula:

1) create a config file for each process:

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

If you want to do it "on the fly", you can change logfile automatically. \012 means "new line", as using \n will print it on the log file: source.

2) Start your command with the "-c" and "-L" flags:

screen -c ./test.conf -dmSL 'Test' ./test.pl

That's it. You will see "test.log" after the first flush:

...
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 ]
...

I found that "-L" is still required even when "log on" is on the config file.

I couldn't find a list of the time format variables (like %m) used by screen. If you have a link of those formats, please post it bellow.

** EXTRA **

In case you want to do it "on the fly", you can use this script:

#!/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

To use it, save it (screen.sh) and set +x permissions:

./screen.sh TEST ./test.pl

... and will execute ./test.pl and create a log file in /var/log/TEST.log

查看更多
叛逆
4楼-- · 2019-01-12 20:41

The following might be useful (Tested on: Linux/Ubuntu 12.04):

cat /dev/ttyUSB0

Using the above, you can then do all the re-directions that you need. For example, to dump output to your console whilst saving to your file, you'd do:

cat /dev/ttyUSB0 | tee console.log
查看更多
登录 后发表回答