Shell中重定向的深入讲解

所属分类: 脚本专栏 / linux shell 阅读数: 2037
收藏 0 赞 0 分享

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

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

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

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

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

$ 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

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

更多精彩内容其他人还在看

linux创建用户useradd命令代码示例

本文通过代码示例给大家介绍了adduser与useradd命令二者的关系 以及使用useradd命令添加用户的方法,需要的朋友参考下吧
收藏 0 赞 0 分享

Linux 中LVS NAT 配置步骤的详解

这篇文章主要介绍了Linux 中LVS NAT 配置步骤的详解的相关资料,这里列出详细的实现步骤,需要的朋友可以参考下
收藏 0 赞 0 分享

Linux中的内核链表实例详解

这篇文章主要介绍了Linux中的内核链表实例详解的相关资料,链表中一般都要进行初始化、插入、删除、显示、释放链表,寻找节点这几个操作,需要的朋友可以参考下
收藏 0 赞 0 分享

Shell中特殊字符的用法总结大全

这篇文章主要给大家总结了关于Shell中特殊字符的相关资料,文中包括分好、&、#、!、$、大于号、单双引号等等一系列特殊字符的用法,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
收藏 0 赞 0 分享

Shell脚步攻略之管道重定向基础

管道是为了解决进程间通信问题而存在,它可以让两个进程之间的数据进行传递,将一个进程的输出数据传递给另一个进程作为其输入数据
收藏 0 赞 0 分享

Linux shell数组循环的实例详解

这篇文章主要介绍了Linux shell数组循环的实例详解的相关资料,这里举例说明如何实现shell数组循环,需要的朋友可以参考下
收藏 0 赞 0 分享

linux shell内置判断语句

内置判断,成功的时候返回0,不成功返回非零。接下来通过本文重点给大家介绍linux shell内置判断语句,感兴趣的的朋友一起看看吧
收藏 0 赞 0 分享

Linux文件的归档和压缩命令

文件归档命令tar,文件归档有好多好处,方便使用易于管理,接下来通过本文给大家分享linux文件的归档和压缩命令,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

Linux Shell中curl和wget使用代理IP的方法教程

这篇文章主要给大家介绍了关于在Linux Shell中curl和wget使用代理IP的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
收藏 0 赞 0 分享

Linux 日常常用指令及应用小结

最近在学习一些基本的Linux指令,在这里总结一下,在搭环境中常用的一些指令,熟悉这些指令就基本能够使用CentOS进行日常操作了
收藏 0 赞 0 分享
查看更多