当前位置: 首页 > 编程笔记 >

Shell中重定向的深入讲解

卫诚
2023-03-14
本文向大家介绍Shell中重定向的深入讲解,包括了Shell中重定向的深入讲解的使用技巧和注意事项,需要的朋友参考一下

标准输入、标准输出和标准错误

一个程序的的输入可以来自于键盘,也可以来自于文件或者其他设备;同样的,一个程序也可以将输出显示在屏幕或者保存到文件中。这就涉及到标准输入、标准输出和标准错误。

程序的输入是标准输入,默认是键盘,用户可以将其指定为文件或其他设备。

程序的输出有两种,即标准输出和标准错误,其中标准输出是程序的正常输出、标准错误是程序的错误输出。二者默认都被指定为屏幕,用户可以将其指定为文件或其他设备。

下面的程序从键盘读取输入,将结果显示在屏幕上,即标准输入、标准输出和标准错误都采用默认的设置:

$ ls ~
hello.txt homework name source.list.bk

重定向

用户可以对输入和输出进行重定向,即指定标准输入、标准输出和标准错误。

标准输入使用<进行指定,下面的命令将input文件作为sort命令的输入,即将sort命令的标准输入重定向为input文件:

$ cat input
zhao
qian
sun
li
zhou
wu
zheng
wang
$ sort < input
li
qian
sun
wang
wu
zhao
zheng
zhou

本例中input文件作为sort命令的标准输入。

使用>重定向标准输出:

$ ls ~ > output
$ cat output
hello.txt
homework
input
name
output
source.list.bk

如上所示,ls ~的标准输出被重定向为output,因此其输出被写入output文件。

需要注意的是,如果output不存在,将自动创建output文件;如果output存在,那么将清空output的内容,并写入新的内容。

如果只是想在输出文件的已有内容的末尾追加,可以使用>>:

$ date >> output
$ cat output
hello.txt
homework
input
name
output
source.list.bk
Sat Jun 30 18:18:53 CST 2018

下面的命令将标准输入重定向为input,将标准输出重定向为output:

$ sort < input > output # 覆盖output内容
$ sort < input >> output # 在output末尾追加内容

文件描述符

每个输入源和输出地都有一个描述符,标准输入的描述符为0,标准输出的描述符为1,标准错误的描述符为2。

使用0<重定向标准输入,事实上,由于程序的默认重定向输入即为标准输入,所以下面的两条命令是等价的:

$ sort < input
$ sort 0< input

同样的,程序的默认重定向输出为标准输出,所以下面的两条命令也是等价的:

$ ls > output
$ ls 1> output

下面的命令将标准输入重定向为input文件,标准输出重定向为output文件(追加),将标准错误重定向为error文件:

$ sort < input 1>> output 2> error

组合标准输出和标准错误

下面的命令将标准输出重定向为output文件,标准错误仍然显示在屏幕上:

$ sort < input > output

下面的命令将标准输出重定向为output文件,将标准错误重定向为error文件:

$ sort < input > output 2> error

下面的命令将标准输出重定向为output文件,使用2>&1将标准错误重定向为标准输出:

$ sort < input > output 2>&1

上面的例子中,标准输出和标准错误都会被重定向为output文件。

注意,下面的命令将导致标准输出和标准错误的相互覆盖,因此不可使用:

$ sort < input > output 2> output

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。

 类似资料:
  • 本文向大家介绍Android中AOP(面向切向编程)的深入讲解,包括了Android中AOP(面向切向编程)的深入讲解的使用技巧和注意事项,需要的朋友参考一下 一、闲谈AOP 大家都知道OOP,即ObjectOriented Programming,面向对象编程。而本文要介绍的是AOP。AOP是Aspect Oriented Programming的缩写,中译文为面向切向编程。OOP和AOP是什么

  • 1. Shell 重定向 1.1 Shell 重定向是什么 我们在之前章节有学习 echo/printf 来将我们的需求输出,此时就是我们将系统的返回输出到我们标准终端,使得我们能够看到正常的输出的结果,Unix 命令默认的输入设备即 stdin 为键盘,标准和错误设备即 stdout 为显示器,我们利用重定向可以将输入改为文件,或者将输出重新定向到其他设备或文件中。 1.2 为什么要用重定向 我

  • 本文向大家介绍MyBatis中$和#的深入讲解,包括了MyBatis中$和#的深入讲解的使用技巧和注意事项,需要的朋友参考一下 这是一次代码优化过程中发现的问题,在功能优化后发现部分数据查不到出来了,问题就在于一条sql上的#和$。 下图为两条sql: 从图上可以看出 wwlr.LabelId in(${showLabels}) 和 wwlr.LabelId in(#{showLabels}),其

  • 本文向大家介绍Spring中@Autowire注入的深入讲解,包括了Spring中@Autowire注入的深入讲解的使用技巧和注意事项,需要的朋友参考一下 一直在思考spring的@Autowire注入属性时到底是按类型注入还是按名称注入,今天写了一个测试来证明一下。 定义接口TestService 定义接口实现:TestServiceImpl1和TestServiceImpl2 定义一个bean

  • 问题内容: 谁能解释这种行为?运行: 导致没有输出,而: 产生预期的输出: 管道不应该一步一步地执行第二个示例中对test.file的重定向吗?我对破折号和bash壳都尝试了相同的代码,并且两者的行为相同。 问题答案: 该选项最近添加了一个选项,当停用作业控制时,该选项允许管道中的最后一条命令在当前外壳程序中运行,而不是子外壳程序中运行。 确实会输出

  •   大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。 命令 说明 command > file 将输出重定向到 file。 command < file 将输入重定向到 file。 command >> file 将输出以