shell script 学习笔记-----标准输出
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 学习笔记-----标准输出的更多相关文章
- shell script 学习笔记-----shell变量
1.在赋值语句name=value中不能存在空格,例如:name = value这样的形式会被认为是三个变量,因为本质上来说,脚本的内容就是传给shell程序的变量,而变量之间是通过空格区分的.如果想 ...
- shell script 学习笔记-----if,for,while,case语句
1.if内的判断条件为逻辑运算: 2.if内的判断条件为目录是否存在,文件是否存在,下图先检验目录/home/monster是否存在,然后再检测/home/monster中的file.txt文件是否存 ...
- shell script 学习笔记-----命令执行
1.PATH变量:shell最主要的功能就是执行用户输入的命令,例如当用户输入一条“ls”命令之后,shell就要找到该命令对应的文件并执行.通常shell都会设置一个名叫PATH的环境变量,其中保存 ...
- Linux shell 菜鸟学习笔记....
20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...
- bash shell学习-shell script基础 (笔记)
A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) Linux ...
- shell脚本学习笔记
1.判断符号:中括号[ ] [ ]进行数据的判断,例如我想知道HOME这个变量是否为空,[ -z "$HOME" ],或者两个字符串是否相等,[ "$HOME" ...
- Linux Shell编程学习笔记——目录(附笔记资源下载)
LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...
- shell编程学习笔记(一):编写我的第一段代码
目前在学习Shell编程,我会把我的学习笔记记录在这里.大神可以直接略过~ 嗯,第一段代码,肯定是要输出Hello World了~ 以下蓝色字体的内容为linux命令,红色字体的内容为输出的内容: # ...
- shell编程学习笔记【原创】
本文为本人学习笔记,如有转载请注明出处,谢谢 一.Bourne Shell 有如下四种变量: 用户自定义变量 位置变量,即命令行参数 预定义变量 环境变量 二.位置变量 $ 与键入的命令行一样,包含脚 ...
随机推荐
- JavaMail入门第四篇 接收邮件
上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...
- HDU 5667 Sequence 矩阵快速幂+费马小定理
题目不难懂.式子是一个递推式,并且不难发现f[n]都是a的整数次幂.(f[1]=a0;f[2]=ab;f[3]=ab*f[2]c*f[1]...) 我们先只看指数部分,设h[n]. 则 h[1]=0; ...
- SQL数据库基础(八)
连接查询:通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 常用的两个链接运算符: 1.join on 2.union 在关 ...
- 【JWPlayer】官方JWPlayer去水印步骤
在前端播放视频,现在用html5的video标签已经是一个不错的选择,不过有时候还是需要用StrobeMediaPlayback.JWPlayer这一类的flash播放器,JWPlayer的免费版本带 ...
- VS2010在空解决方案中添加项目
如题,在空解决方案中添加第一个项目的时候会看不到那个solution解决方案文件,而是你当前添加的项目,当你再添加其他项目的时候就悲催了,找不到这个solution,只能在这个项目文件上新加文件,很郁 ...
- MSCRM 2015 新功能(一)
MS官网信息:http://www.microsoft.com/en-us/dynamics/crm-customer-center/what-s-new.aspx MS官网中提到的新功能主要以下几块 ...
- 获取经过跳转后的url地址
粗略一算,不写code已经好几个月了. 昨日受兄弟所托,为他写了一个小小的程序. 程序功能: 自动获取跳转后的Url地址 如下图所示: (newUrl.txt为转换后的地址信息...) 实现过程: 每 ...
- Enforcing the correct protocol for partially SSL secured SharePoint sites
Enforcing the correct protocol for partially SSL secured SharePoint sites http://www.sharepointconfi ...
- EdgesForExtendedLayout
在IOS7 之后viewController有一个新的属性叫做edgesForExtendedLayout,这个属性指定viewController的view边缘延伸的方向,默认情况下是UIRectE ...
- Swift 设计指南之 编程规范
基本准则 用法一目了然是你设计时最重要的目的. 方法和属性这样的实体只声明一次,却会被重复调用.因此你在设计 API 时应尽可能使其简单明了.当评估某个设计时,只阅读声明往往是不够的,有时还需要检查它 ...