关于shell输出重定向,tee的使用,以及time无法被重定向的问题

关于重定向的使用
  1. 使用重定位符可以将命令的输出结果保存到文件
    在这里插入图片描述
    >> 进入追加模式。
    如果命令执行错误,可以使用 2>&1 将命令的输出和错误保存到同一个文件中。
    在这里插入图片描述

  2. tee 命令可以将执行结果显示在屏幕的同时,将结果写进文件。
    在这里插入图片描述
    tee 命令 -a 选项进入附加模式 command | tee -a file.txt

==注意:管道 和 重定向无法同时使用。(管道符的" | "的作用只是把前一个程序的标准输出流(stdout)的数据 作为后一个程序 的标准输入流stdin的数据。而输出重定向是将输出到一个文件重定向到另一个文件。)
在这里插入图片描述
很明显我们的输出重定向无法直接处理管道数据,和许多命令类似的(例如echo命令),我们可以借助 xargs 命令将标准输入中读取内容,传递给它要协助的命令。
在这里插入图片描述

  1. 对于特殊的命令,例如 time 命令

time 可以用于测量一个命令执行的时间。但是我发现time 输出的内容和被测量命令输出的内容不是绑定在一起输出的。

通过简单的测试发现,time命令无论是从1 还是 2 都无法被重定向,对于管道也是无法使用。
在这里插入图片描述

同时,我们使用tee也是无法将 time的输出结果写进文件的。
在这里插入图片描述
通过查阅资料了解到:

time是shell的关键字,shell做了特殊处理,它会把time命令后面的命令行作为一个整体来进行处理,在重定向时,实际上是针对后面的命令来的处理的。且time命令的输出信息是打印在标准错误输出上的(类似的还有dd命令)

这里有两种办法将其结果重定向至文件:

  • 一种是通过 {}将整个命令的输出结果视为一个整体
  • 第二种方法就是使用()通过子shell执行命令,将子shell的输出视为一个整体。

第一种方法:
在这里插入图片描述
第二中方法:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43919932/article/details/123100545