当前位置:首页 > Linux
shell 中的输入、输出重定向
来源:靑龍一笑的博客  作者:靑龍一笑  发布时间:2022-02-21 17:19:46  点击量:210  评论:0

1、文件描述符

    当执行 shell 命令时,会默认打开 3 个文件:标准输入、标准输出、错误输出,对应的文件描述符是 0、1、2。标准输入默认是从键盘获得输入,标准输出和错误输出默认是输出到屏幕。
    可以通过更改文件描述符的默认指向,从而实现输入、输出的重定向。

2、输出重定向

    使用“>”或“>>”对输出进行重定向。符号左边表示文件描述符,默认为 1,也就是标准输出。符号右边可以是一个文件,也可以是一个输出设备。
    当使用“>”时,会判断右边的文件是否存在,如果存在,就先删除,再创建一个新的文件。如果不存在,则直接创建。如果使用“>>”,则不会删除已经存在的文件,而是进行追加。

3、输入重定向

    使用“<”对输入进行重定向。符号左边表示文件描述符,默认为 0,也就是标准输入。符号右边如果没有跟文件名,则表示是一个标准输入(例如:键盘)。
    如果使用“<<”对输入进行重定向,则符号右边表示一个结束符(例如:EOF,表示从标准输入中读入,直到遇到 EOF 结束)。

4、/dev/null

    /dev/null 是 linux 系统的空设备文件,所有往这个文件中写入的内容都会被丢弃。

5、常见的组合命令

    >/dev/null  表示不显示也不保存标准输出,即标准输出会被丢弃。
    2>&1  使用 & 符号进行了重定向绑定,表示错误输出重用了标准输出的描述符。
    >/dev/null 2>&1  表示不显示也不保存标准输出,而错误输出重用了标准输出的描述符,也就是说错误输出同样会被丢弃。
    2>&1 >/dev/null  由于错误输出重用了标准输出的描述符,而此时的标准输出是屏幕,因此,错误输出被输出到了屏幕。而之后,标准输出被丢弃了。
    不能使用 >out 2>out 的写法(out 表示一个文件或者一个输出设备,例如:/dev/null),如果不使用重定向绑定,标准输出和错误输出会抢占往 out 输出内容,整体 IO 效率不如重定向绑定高效。如果 out 是一个文件,可能会导致输出到 out 的内容出现缺失、覆盖等情况,从而显示为乱码。

版权所有 © 2005-2023 靑龍一笑的博客  Powered by C.S.Ricen
Copyright © 2005-2023 by www.ricensoftwares.com.cn  All Rights Reserved.

欢迎光临本站,这里是靑龍一笑的博客。

因资金匮乏,本站已迁到国外的免费空间,可能导致本站的访问速度较慢,由此给您带来的不便,敬请谅解。

您可以通过下方的“支持本站建设”链接,给本站提供资金支持。

Free Web Hosting