shell脚本【符号2】I/O重定向相关符号

本文详细介绍了Shell脚本中的I/O重定向,包括标准输入、输出和错误输出的重定向,以及相关的操作符号。通过多个示例展示了不同重定向方式的效果,如1>、2>、>>、2>&1等,并讲解了 tee 命令和 exec 命令在I/O重定向中的应用。此外,文章还分析了在脚本中使用这些重定向时可能遇到的问题及解决方案。
摘要由CSDN通过智能技术生成

本篇博客用于介绍I/O重定向相关的符号和操作

 I/O重定向符号:>   <    >>    2>   1>   &1   &>

一.概念:

        标准输入重定向:就是把命令的输入从默认的从键盘读取,重定向到一个文件: <file。

        标准输出重定向:就是把命令的标准输出保存到指定的文件内:>file   >>file   1>file。

        标准错误输出重定向:把命令的错误输出保存到指定文件内:2>file   2>>file。

        标准错误输出和标准输出均重定向到同一个文件的操作:

        1>file 2>&1  或   &>file   或  &>>file (其中>和>>的区别就是一个覆盖文件原内容,一个不覆盖。并且注意,是没有2>>&1这种写法的。        

二.区分:

     标准输出和标准错误输出不是包含关系,是两个独立的输出。标准输出是输出正常显示信息,标准错误输出是输出出错信息。

     命令、shell脚本、判断(循环)语句块、shell函数等等,一切中间可以嵌套echo语句的或者本身就有输出的命令语句,都可以进行标准输入、标准输出、标准错误输出的I/O重定向。(可能这句话没有那么准确)

三.重定向过程:

       系统会打开一个默认的文件,用于标准输入、标准输出、标准错误输出指向文件。

       重定向后,系统会先关闭原指向文件,打开新文件,并把打开这个文件产生的指针重新装入进程文件表中。此时,文件描述符就更改了,更改为了指向新打开的这个文件的指针。所以,此时再用&1引用这个描述符,就是代表新打开的这个文件,而不是原系统默认文件。

        需要注意的是:在重定向的时候,就已经对文件进行了操作。          如“>file”:在重定向后,file的内容就已经清空了,这在重定向这一步已经发生,而此时,命令行还没有执行。(命令解析过程:点击打开链接

        你也可以对比下面的例①。当重定向写法:>OriginalFile  1>TestFile时,虽然最后把标准输出定向到了TestFile。但是在定向到TestFile之前,是先定向到OriginalFile,然后又一次重定向到的TestFile。所以,OriginalFile的内容已经先一步被清空。

四.如何输出

        提问:有没有办法,让输出信息既打印进文件,同时又输出到终端呢?

        答案:有。

        方法1:tee命令。

        例如:bash test | tee filename

        分析:bash test命令的输出结果,通过管道传递给tee命令。tee命令一边把标准输出打印进文件filename,一边就输出信息到屏幕。(注意的是,管道不能传递标准错误输出点击打开链接

        方法2:/dev/tty

        这种方法,如果重定向了脚本的标准输出和标准错误输出,通过>/dev/tty,可以将输出信息仍然能够送到用户的终端窗口,但是注意:输出到终端的这一句信息,不会再保存到文件内

        顺便讲一下命令:exec,这个命令有两种用法,我们今天只讲它重定向的功能。

        exec命令加在脚本中,可以使这个脚本中其随后的所有命令的标准输入、标准输出、标准错误输出重定向。

        脚本例子test:

                echo hello
                exec >filename 2>errfilename       #exec命令加在这里,只对下面的所有命令有效果
                echo chenhaojie >/dev/tty          #加了exec命令后,如果想输出中间的某一句,可以使用这种方式
                echo WUST                          #由于exec的作用,打印到filename文件,而不是终端

        执行:bash test

        终端屏幕输出;hello 

                              chenhaojie

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值