Save Screen (program) output to a file

后端 未结 11 2446
长发绾君心
长发绾君心 2020-12-02 04:30

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 through a serial port, using Scree

相关标签:
11条回答
  • 2020-12-02 05:11

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

    For multiple screen sessions, this is my formula:

    1. Create a configuration 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 configuration 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

    0 讨论(0)
  • 2020-12-02 05:17

    Existing screen log can be saved by :

    Ctrl+A : hardcopy -h filename

    0 讨论(0)
  • 2020-12-02 05:18

    For the Mac terminal:

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

    Details

    • script: A built-in application 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 character
    • out.txt: Is just the output file name
    • screen /dev/ttyUSB0 115200: Command from question for connecting to an external device

    You can then use tail to see that the file is updating.

    tail -100 out.txt
    
    0 讨论(0)
  • 2020-12-02 05:22

    The following command works for Screen version 4.06.02:

    screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed
    

    From the man page of Screen:

    -Logfile file : By default logfile name is "screenlog.0".
                    You can set new logfile name with the "-Logfile" option.
    

    You can check the existing version of Screen using screen -version. You can download and install the latest Screen version from https://www.gnu.org/software/screen/.

    0 讨论(0)
  • 2020-12-02 05:22

    The 'script' command under Unix should do the trick. Just run it at the start of your new console and you should be good.

    0 讨论(0)
  • 2020-12-02 05:31

    A different answer if you need to save the output of your whole scrollback buffer from an already actively running screen:

    Ctrl-a [ g SPACE G $ >.
    

    This will save your whole buffer to /tmp/screen-exchange

    0 讨论(0)
提交回复
热议问题