关于重定向的使用
-
使用重定位符可以将命令的输出结果保存到文件
>>
进入追加模式。
如果命令执行错误,可以使用 2>&1 将命令的输出和错误保存到同一个文件中。
-
tee 命令可以将执行结果显示在屏幕的同时,将结果写进文件。
tee 命令 -a 选项进入附加模式command | tee -a file.txt
==注意:管道 和 重定向无法同时使用。(管道符的" | "的作用只是把前一个程序的标准输出流(stdout)的数据 作为后一个程序 的标准输入流stdin的数据。而输出重定向是将输出到一个文件重定向到另一个文件。)
很明显我们的输出重定向无法直接处理管道数据,和许多命令类似的(例如echo命令),我们可以借助 xargs 命令将标准输入中读取内容,传递给它要协助的命令。
- 对于特殊的命令,例如 time 命令
time 可以用于测量一个命令执行的时间。但是我发现time 输出的内容和被测量命令输出的内容不是绑定在一起输出的。
通过简单的测试发现,time命令无论是从1 还是 2 都无法被重定向,对于管道也是无法使用。
同时,我们使用tee也是无法将 time的输出结果写进文件的。
通过查阅资料了解到:
time是shell的关键字,shell做了特殊处理,它会把time命令后面的命令行作为一个整体来进行处理,在重定向时,实际上是针对后面的命令来的处理的。且time命令的输出信息是打印在标准错误输出上的(类似的还有dd命令)
这里有两种办法将其结果重定向至文件:
- 一种是通过
{}
将整个命令的输出结果视为一个整体 - 第二种方法就是使用
()
通过子shell执行命令,将子shell的输出视为一个整体。
第一种方法:
第二中方法: