shell输出重定向的实现

 更新时间:2023年01月12日 09:59:00   作者:金色熊族  
本文主要介绍了shell输出重定向的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

1.输入输出重定向介绍

重定向简单来说就是把本来已经默认的、确定的输入输出给重新定位到你想要的地方。 重定向这个概念在C语言中就有,在C语言编程中,标准输出是屏幕,使用printf()函数默认是输出到屏幕显示。但是有时候我们需要将信息输出到文件或者申请的内存中,这时候就可以用sprintf()和fprintf()函数;也可以
将标准输出的文件描述符给强行占用,使标准输出的文件描述符指向自己想要的文件。在shell中默认打开了三个文件,分别是标准输出(文件描述符0)、标准输出(文件描述符1)、错误输出(文件描述符2),标准输入默认是键盘,标准输出和错误输出默认是屏幕。

2.>和>>介绍

解析:>和>>都是重定向的符号,符号的左边表示文件描述符或者要重定位的内容,如果不写默认是文件描述符1,即标准输出;右边可以是文件也可以是设备。
1.当使用>时,如果右边的文件存在则会先删除在创建,如果右边的文件不存在则创建;
2.当使用>>时,表示追加,右边的文件不会被删除,新的内容会添加到文件的末尾。

3.命令:>/dev/null 2>&1

解析:这可以理解成两句指令:>/dev/null 和 2>&1
(1)>/dev/null :将文件描述符1重定向到/dev/null,文件描述符1是标准输出,/dev/null在linux中是空的设备文件,所以往这个设备文件输入的内容都会丢失;这句指令的作用就是将标准输出重定向到/dev/null这个空的设备文件里,效果就是全部的输出都会丢掉。
(2)2>&1:将文件描述符2重定向到文件描述符1指向的地方,也就是空的设备文件。执行该指令后,标准输出和错误输出都往空设备文件里写,效果就是两者都丢不再打印到屏幕。

4.命令:2>&1 >/dev/null

解析:同样分成两个语句理解、
(1)2>&1:将文件描述符2重定向到文件描述符1指向的地方,此时标准输出是屏幕。该指令的效果是标准输出和错误输出都输出到屏幕。
(2)>/dev/null:将标准输出重定向到空的设备文件,即屏幕不再打印标准输出;但是错误输出此时还是会往屏幕输出,因为错误输出并没有重定向到空的设备文件。

5.总结:

(1)**>/dev/null 2>&1:**标准输出和错误输出都舍弃掉;
(2)**2>&1 >/dev/null:**标准输出被舍弃掉,错误输出被重定位到屏幕;

在Linux下,当一个用户进程被创建的时候,系统会自动为该进程创建三个数据流即stdin stdout stderr。在shell里面,分别用0,1,2代表stdin stdout stderr。

stdin默认从键盘接收输入,而stdout和stderr默认向console输出。

示例1

echo默认将hello送到stdout显示。而"|"管道符接收来自stdout的输入 。所以echo hello的结果被送到grep处理,最终显示hello。

示例2

echo hello本来是要把hello输出到stdout,但是由于1>&2的作用,最终hello交给了stderr。其实stderr也是在console上显示,所以输出结果是hello。但是管道符|只收到stdout,收不到stderr的数据,所以hello传不到grep,最终只通过stderr打印hello。

再举一个从stderr向stdout定向的示例3

ls 查找一个并不存在的文件,将打印错误信息

 将ls c.cpp与 grep cpp连用,打印相同的信息。但是这是出错信息,通过stderr输出的,而管道符只接受stdout的输出所以grep不处理信息,打印出来的cpp字符串也不标红。

只有把stderr重定向到stdout---2>&1,才能让grep起作用,看到标红的cpp。

示例4

 echo hello产生hello并输出到stdout。同时2>&1将错误信息也交给stdout。但是echo hello并无错误信息,所以最后stdout的内容就是hello,并由grep处理,产生标红的hello。

示例5

使用1>2重定向,注意这里不是&2。此时重定向的目的不再是stderr,而是文件2.假如2文件不存在,则shell将创建一个,并将hello输入到文件里。管道符还是不能从stdout那里得到数据,所以控制台不打印。

示例6 也可以用<来定向stdin

文件2的内容是hello。可以用<2 或者0<2实现重定向。至于grep h 2,也是可以的--grep也接收文件名作为输入参数。只有最后一种操作返回不了理想的结果--grep h &0<2

到此这篇关于shell输出重定向的实现的文章就介绍到这了,更多相关shell输出重定向内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • Shell脚本实现的memcached进程监控

    Shell脚本实现的memcached进程监控

    这篇文章主要介绍了Shell脚本实现的memcached进程监控,实现功能为监控memcached进程是否存在,不存在则启动memcached并重载nginx,需要的朋友可以参考下
    2014-07-07
  • Linux Shell脚本中获取本机ip地址方法

    Linux Shell脚本中获取本机ip地址方法

    这篇文章主要介绍了Linux Shell脚本中获取本机ip地址方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • shell输出重定向的实现

    shell输出重定向的实现

    本文主要介绍了shell输出重定向的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 详解linux less命令查看大文件

    详解linux less命令查看大文件

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。本文主要给大家介绍linux less命令查看大文件的相关知识,感兴趣的朋友一起看看吧
    2018-10-10
  • Shell脚本切割tomcat的日志文件

    Shell脚本切割tomcat的日志文件

    这篇文章主要介绍了Shell脚本切割tomcat的日志文件的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • Linux的打包压缩与解压缩---tar、xz、zip、unzip命令详解

    Linux的打包压缩与解压缩---tar、xz、zip、unzip命令详解

    Linux 下一堆各式各样的压缩文件名:.gz、.tar.gz、tgz、bz2、.Z、.tar 等众多的压缩文件名,本文重点介绍Linux的打包压缩与解压缩---tar、xz、zip、unzip命令,感兴趣的朋友一起看看吧
    2024-02-02
  • 编写Bash Shell通过gnuplot绘制系统性能数据图的方法

    编写Bash Shell通过gnuplot绘制系统性能数据图的方法

    这篇文章主要介绍了编写Bash Shell通过gnuplot绘制系统性能数据图的方法,做到可视化数据收集,需要的朋友可以参考下
    2015-07-07
  • linux下socket编程常用头文件(推荐)

    linux下socket编程常用头文件(推荐)

    这篇文章主要介绍了linux下socket编程常用头文件,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-10-10
  • shell脚本自动修复mysql损坏的表

    shell脚本自动修复mysql损坏的表

    这篇文章主要介绍了shell脚本如何自动修复mysql损坏的表,需要的朋友可以参考下
    2015-10-10
  • 详解Linux中两个查找命令locate和find教程

    详解Linux中两个查找命令locate和find教程

    在linux中有很多查找命令,今天小编抽空给大家讲解find和locate两个命令,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-11-11

最新评论

?


http://www.vxiaotou.com