我需要保存 屏幕的整个输出到一个文件,以便稍后检查所有的内容。
原因是我通过串行端口转储一个闪存,使用屏幕与它接口。我想保存到一个文件,以检查内存结构。
我试过了:
screen /dev/ttyUSB0 115200 >> foo.txt screen /dev/ttyUSB0 115200 | tee foo.txt
我也尝试过使用 screen 中的 buffer 文件,但是我不知道如何使用它。
有简单的办法吗?
Unix 下的“ script”命令应该可以解决这个问题。只要在新控制台的开始运行它,就应该没问题了。
还可以使用 Ctrl + A、 H将日志保存到 截屏文件中。
再来一个 Ctrl + A和 H关掉它。
Ctrl + A,H: 将当前窗口的日志记录到文件“ screen log.n”的开始/结束。
以下内容可能有用(在 Linux/Ubuntu 12.04(精确穿山甲)上测试) :
cat /dev/ttyUSB0
使用上面的命令,您可以执行所有需要的重定向操作。例如,要在保存到文件的同时将输出转储到控制台,您需要:
cat /dev/ttyUSB0 | tee console.log
有一个用于日志记录的命令行选项。输出保存到 screen log.n 文件中,其中 n 是屏幕的一个数字。 来自手册页的屏幕:
告诉屏幕为窗口打开自动输出日志。
对于 Mac 终端:
script -a -t 0 out.txt screen /dev/ttyUSB0 115200
script
-a
-t 0
out.txt
screen /dev/ttyUSB0 115200
然后可以使用 尾巴查看文件是否正在更新。
tail -100 out.txt
所选择的答案不能很好地处理多个会话,并且不允许指定自定义日志文件名。
对于多个屏幕会话,这是我的公式:
为每个进程创建一个配置文件:
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将在日志文件中打印它: 来源。
logfile
\012
\n
使用“-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 ] ...
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.
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
要使用它,保存它(screen. sh)并设置 + x 权限:
./screen.sh TEST ./test.pl
... 并将执行./test.pl 并在/var/log/TEST.log 中创建一个日志文件
Ctrl+A然后 Shift+H为我工作。你可以查看文件 screenlog.0,而程序仍然在运行。
screenlog.0
以下命令适用于 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.
您可以使用 屏幕版本检查 屏幕的现有版本。您可以从 https://www.gnu.org/software/screen/下载并安装最新的 屏幕版本。
这里有一个技巧: 包装它在 sh -c!
sh -c
screen sh -c './some-script 2>&1 | tee mylog.log'
其中,2>&1将 stderr 重定向到 stdout,这样 tee就可以捕获并记录错误消息。
2>&1
tee
如果您需要从一个已经在运行的屏幕中保存整个回滚缓冲区的输出,那么另一个不同的答案是:
Ctrl-a [ g SPACE G $ >.
这将把整个缓冲区保存到/tmp/screen-exchange
现有的屏幕日志可以通过以下方式保存:
Ctrl+A :硬拷贝-h 文件名
我花了很多钱才找到一个干净的解决办法。虽然以前的回复是好的,我发现这是更直接的。
此命令将等待5秒钟将输出写入文件。“ sudo”部分取决于您的环境。
screen -dm bash -c 'sleep 5;echo "done" | sudo tee ./test.txt'