解决控制台输出写入文件时末尾缺几行

随笔记录

目录

1.背景介绍

2. unbuffer

2.1安装

2.2 使用说明

3. 手动刷新缓冲区


1.背景介绍

因程序运行期间终端输出信息 直接重定向写入指定文件时,结尾出易缺失。所以通过 unbuffer 可以快速且完成的将输出信息写入指定文件。

这种情况可能是由于缓冲造成的。在 Linux 中,程序的输出通常被缓存起来,等到缓冲区满了或者程序结束时再全部输出。如果程序还没有结束的情况下将输出重定向到文件中,那么只有缓冲区中的内容会被写入文件,而还未被输出的内容就会被丢失。

为了解决这个问题,可以使用以下两种方法:

  • unbuffer
  • tee
2. unbuffer
使用unbuffer命令来禁用程序的输出缓冲,使得程序的输出立即被写入文件中。

unbuffer命令可以用expect软件包中的脚本unbuffer来实现
2.1安装

安装 unbuffer 命令
# sudo yum install expect    # yum直接安装即可,注意要用root权限

[root@localhost ~]# yum install expect       # # yum直接安装即可,注意要用root权限
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                                                                                                        | 4.7 kB  00:00:00
 * base: mirrors.huaweicloud.com
 * epel: mirrors.bfsu.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.bfsu.edu.cn
base                                                                                                                                                        | 3.6 kB  00:00:00
epel                                                                                                                                                        | 4.7 kB  00:00:00
extras                                                                                                                                                      | 2.9 kB  00:00:00
updates                                                                                                                                                     | 2.9 kB  00:00:00
(1/2): epel/x86_64/updateinfo                                                                                                                               | 1.0 MB  00:00:04
(2/2): epel/x86_64/primary_db                                                                                                                               | 7.0 MB  00:00:06
Resolving Dependencies
--> Running transaction check
---> Package expect.x86_64 0:5.45-14.el7_1 will be installed
--> Processing Dependency: libtcl8.5.so()(64bit) for package: expect-5.45-14.el7_1.x86_64
--> Running transaction check
---> Package tcl.x86_64 1:8.5.13-8.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================================================================================
 Package                                  Arch                                     Version                                            Repository                              Size
===================================================================================================================================================================================
Installing:
 expect                                   x86_64                                   5.45-14.el7_1                                      base                                   262 k
Installing for dependencies:
 tcl                                      x86_64                                   1:8.5.13-8.el7                                     base                                   1.9 M

Transaction Summary
===================================================================================================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 2.1 M
Installed size: 4.9 M
Is this ok [y/d/N]: y                       # y
Downloading packages:
(1/2): expect-5.45-14.el7_1.x86_64.rpm                                                                                                                      | 262 kB  00:00:00
(2/2): tcl-8.5.13-8.el7.x86_64.rpm                                                                                                                          | 1.9 MB  00:00:01
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                              1.3 MB/s | 2.1 MB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:tcl-8.5.13-8.el7.x86_64                                                                                                                                       1/2
  Installing : expect-5.45-14.el7_1.x86_64                                                                                                                                     2/2
  Verifying  : 1:tcl-8.5.13-8.el7.x86_64                                                                                                                                       1/2
  Verifying  : expect-5.45-14.el7_1.x86_64                                                                                                                                     2/2

Installed:
  expect.x86_64 0:5.45-14.el7_1

Dependency Installed:
  tcl.x86_64 1:8.5.13-8.el7

Complete!
[root@localhost ~]#
2.2 使用说明
# 程序的输出就可以被立即写入到文件中,而不会被缓冲

unbuffer  > <重定向写入文件>
# unbuffer ./test_yusur_futures_market enp1s0 enp1s0d1 >308_231022.txt
3. tee
tee:手动刷新缓冲区,强制程序将缓冲区中的内容写入文件中
command | tee -a file.txt

# ./market_init.sh |tee -a /home/test/market_init.txt   



tee 作用是将程序的输出同时输出到标准输出和文件中,并且使用-a选项将数据追加到文件的末尾。这样每次输出完毕之后,就会将缓冲区中的内容写入文件中。

需要注意的是,如果程序使用了stderr输出,也需要将其重定向到文件中,否则程序的错误信息还是会输出到终端上,而不会写入文件中:

command 2>&1 | tee -a file.txt

你可能感兴趣的:(linux,服务器,运维)