如同之前的例子那样,我们将输出的内容保存在了日志文件中。有的时候,我们需要命令的输出结果不仅仅是显示在屏幕上,还希望可以将其重定向到另一个位置,比如文件。

输出重定向

> 可以用来将命令的输出发送到一个文件中。
command > outputfile

  1. $ date > test6
  2. $ ls -l test6
  3. -rw-r--r-- 1 mugpeng wheel 29 Jun 11 12:23 test6
  4. $ cat test6
  5. Thu Jun 11 12:23:05 CST 2020

若输出的文件已经存在,则新执行的重定向内容会覆盖原有的内容。

如果有时候不想覆盖文件的原有内容。则可以通过>> 进行追加数据。

  1. $ who >> test6
  2. $ cat test6
  3. Thu Jun 11 12:23:05 CST 2020
  4. mugpeng console Jun 2 13:36
  5. mugpeng ttys000 Jun 6 10:21

输出流

image.png
可以简单理解为:1 表示正确输出,2表示错误输出。

image.png
会将本来的输出流从默认的屏幕输出捕获到test文件,而错误输出则捕获到标准输出流中(标准输出已经重定向到test文件,因此错误输出实际也重定向到test文件中)。

输入重定向

输入重定向将文件的内容重定向到命令。
command < inputfile

  • 记忆方法:输入重定向与输出重定向符号相反。在命令行上,命令在左,文件在右,重定向符号指向数据流动的方向

我们可以通过wc 命令,通过输入重定向,对文件的内容信息进行处理。(wc 命令获取文本的行、词、字符数)

  1. $ wc < test6
  2. 3 16 93

此外,还有一种内联输入重定向inline input redirection。该重定向无需对命令指定文件,但需要指定一个文本标记来划分输入数据的开始与结尾,使用内联输入重定向,shell 会使用次提示符来提示输入数据。符号为<<
注意开始和结尾都使用了一致的文本标记test

  1. $ wc << test
  2. > I
  3. > am
  4. > happy.
  5. > test
  6. 3 3 12