1、将标准输出(stdout)和标准错误输出(stderr)分别重定向到两个不同的文件

其中符号'>'默认将标准输出重定向,意思和'1>'相同,‘2>'表示重定向标准错误输出,数字1和2其实是文件描述符,在Linux下默认1为标准输出STDOUT,2为标准错误输出STDERR

2、将标准输出和标准错误输出重定向到同一个文件中,共有下图所示三种写法,后两种写法可以认为符号&是作为特殊标记了,第一种写法则可以看做先将STDOUT输出到both文件,“2>&1”则可将1理解为标准输出重定向的文件,然后“2>&1”相当于一个赋值操作,将文件描述符2指向的文件赋值为文件描述符1指向的文件

3、重定向符'>'默认会将目标文件清空(如果存在的话),然后添加重定向的内容。如果需要在目标文件的末尾进行添加,则需要使用">>"重定向符,如下所示

4、/dev/null是Unix/Linux系统中一个特殊的设备,它并不是真正的设备,所有你认为没用的数据都可以重定向到它,并且不会占据任何磁盘空间,如下图就将错误信息扔进了/dev/null中

5、将多个命令的输出重定向到同一个文件有以下两种方式,但是基于的原理是完全不同的,花括号那组其实只是将括号中命令的输出集中重定向而已,但是普通括号内的命令是在子shell,也就是subshell中运行的。这时我们就会发现,因为cd指令的存在,第一条命令运行后我们仍在之前的目录(因为subshell中位置的改变与父shell无关),但是第二条指令运行之后,我们就在上级目录了

6、将一个程序的输出作为另一个程序的输入,最常见的如下图所示,但是需要注意的是,这两个程序是运行在不同的subshell中的!

7、将管道中的数据流备份:使用如下所示是tee命令,它将数据量输入下一级管道的同时,将它们备份到tee.file文件中

8、将数据重定向到多个文件中,如下图所示,其实本质上就是将写入不同文件描述符的数据重定向到不同的文件中,这样的话,在程序中可以不事先打开文件,而直接向文件描述符写数据,例如:write(3,buf,255),就是直接向文件描述符3写数据,而我事先并没有打开文件的操作

9、如果没有使用特殊的手法,例如将STDERR重定向至STDOUT或者在程序中就进行重定向,那么管道只重定向STDOUT,我们没有办法只重定向STDERR而不重定向STDOUT

10、交换STDOUT和STDERR:如果你想要将STDOUT输出到stdout.logfile中,并且通过tee将STDERR即输出到屏幕又输出到stderr.logfile。这时就需要使用下图所示的方法。其实本质上就是交换了STDOUT和STDERR。类似于两个整数的交换。首先将描述符3赋值为1,即STDOUT,再将标准输出的内容输出到stdout.logfile中,最后"2>&3"表示将标准错误的数据往标准输出中写,因为此时描述符3的值就是标准输出,这样标准错误的内容就能通过标准输出通过管道了

11、我们知道重定向符号'>'会覆盖目标文件中的内容,那么为了防止误操作导致重定向覆盖了我们原先不想被覆盖的文件,我们可以采用如下的方法,如果要恢复默认设置,使用“set +o noclobber”,如果在已经设置了noclobber的情况下,仍然强行做一次重定向覆盖操作,则可使用类似“echo do it >| my.file”的方法,“>|”表示强行重定向覆盖操作

参考文献:《bash Cookbook》,Carl Albing

shell script 学习笔记-----标准输出的更多相关文章

  1. shell script 学习笔记-----shell变量

    1.在赋值语句name=value中不能存在空格,例如:name = value这样的形式会被认为是三个变量,因为本质上来说,脚本的内容就是传给shell程序的变量,而变量之间是通过空格区分的.如果想 ...

  2. shell script 学习笔记-----if,for,while,case语句

    1.if内的判断条件为逻辑运算: 2.if内的判断条件为目录是否存在,文件是否存在,下图先检验目录/home/monster是否存在,然后再检测/home/monster中的file.txt文件是否存 ...

  3. shell script 学习笔记-----命令执行

    1.PATH变量:shell最主要的功能就是执行用户输入的命令,例如当用户输入一条“ls”命令之后,shell就要找到该命令对应的文件并执行.通常shell都会设置一个名叫PATH的环境变量,其中保存 ...

  4. Linux shell 菜鸟学习笔记....

    20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...

  5. bash shell学习-shell script基础 (笔记)

    A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux ...

  6. shell脚本学习笔记

    1.判断符号:中括号[ ] [ ]进行数据的判断,例如我想知道HOME这个变量是否为空,[ -z "$HOME" ],或者两个字符串是否相等,[ "$HOME" ...

  7. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  8. shell编程学习笔记(一):编写我的第一段代码

    目前在学习Shell编程,我会把我的学习笔记记录在这里.大神可以直接略过~ 嗯,第一段代码,肯定是要输出Hello World了~ 以下蓝色字体的内容为linux命令,红色字体的内容为输出的内容: # ...

  9. shell编程学习笔记【原创】

    本文为本人学习笔记,如有转载请注明出处,谢谢 一.Bourne Shell 有如下四种变量: 用户自定义变量 位置变量,即命令行参数 预定义变量 环境变量 二.位置变量 $ 与键入的命令行一样,包含脚 ...

随机推荐

  1. C# winform调用浏览器打开页面方法分享,希望对大家有帮助

    在很多客户端程序中我们都需要调用浏览器打开网页,这里分享一个可以在我winform程序调用浏览器的方法,测试通过了. 声明:这个方法是上万个用户测试通过的,不是我没有测试通过就拿出来分享,那个是自己搬 ...

  2. 如何高效部署前端代码,如css,js...

    看了网上一些文章,做了点总结,顺便再加点自己的东西,简单的说下. 1.利用浏览器的304缓存,但是304叫协商缓存,还是需要与服务器通信一次 2.强制使用浏览器使用本地缓存(cache-control ...

  3. 安装xampp无法设置默认时间的坑

    xampp无法设置默认时间,修改了时间还是无效 [Date] ; Defines the default timezone used by the date functions ; http://ph ...

  4. 利用多写Redis实现分布式锁原理与实现分析(转)

    利用多写Redis实现分布式锁原理与实现分析   一.关于分布式锁 关于分布式锁,可能绝大部分人都会或多或少涉及到. 我举二个例子:场景一:从前端界面发起一笔支付请求,如果前端没有做防重处理,那么可能 ...

  5. c#泛型方法返回null的问题

    c#的泛型方法实现和java实现有点不同,在java中,所有的泛型方法运行时类型必须是引用类型,所以和非泛型一样可以返回null. 但是c#中有点不同,可以同时是值类型和引用类型,而值类型不能赋值nu ...

  6. mysql grant all on *.* to xxx@'%' 报Access denied for user 'root'@'localhost'

    今日,开发反馈某台mysql服务器无法登陆,解决之后,远程登录后发现用户只能看到information_schema,其他均看不到. 故登录服务器执行: mysql> grant all on ...

  7. VM虚拟机忘记密码

    关掉虚拟机. VM->Settings,选中Hard Disk,在右边出现了Utilities的一个下拉栏,OK,点击它选择Map,这时弹出一个"Map Virtual Disk&qu ...

  8. swift学习笔记之-闭包

    //闭包 import UIKit /*闭包(Closures): 函数.闭包.类都是引用类型(引用类型的实例赋值给变量或常量时,得到的都是该实例的引用,而值类型的实例变量得到的是独立的值的拷贝) 1 ...

  9. SharePoint 2013 自定义模板页后在列表里修改不了视图

    前言 最近系统从2010升级至2013,有自定义模板页.突然发现在列表中切换不了视图,让我很费解. 我尝试过以下解决方案: 去掉自定义css 去掉自定义js 禁用所有自定义功能 结果都没有效还是一样的 ...

  10. SharePoint 2013 术语和术语集介绍

    托管元数据是一个集中管理的术语的分层集合,我们可以定义术语和术语集,然后将其用作 SharePoint Server 2013 中项目的属性.简单的说,术语是一个可与 SharePoint Serve ...