Bash的输入输出重定向

news/2024/7/5 9:53:13

Bash的输入输出重定向

此页由Linux Wiki用户 Chenxing于2012年12月18日 (星期二) 07:58的最后更改。 在 linuxCook的工作基础上。

使用Bash可以方便的用<和>实现输出输入的重定向,本文讨论重定向的一些细节和技巧。本文介绍部分是对Bash Quick Reference相关内容的翻译。

目录

[隐藏]
  • 1 基础知识
  • 2 简单重定向
  • 3 使用文件描述符的重定向
  • 4 重定向的组合应用
  • 5 重定向实例
  • 6 类似重定向的功能
    • 6.1 进程替换
  • 7 参考资料

基础知识

文件描述符(File Descriptor),是进程对其所打开文件的索引,形式上是个非负整数。类 Unix 系统中,常用的特殊文件描述符如下:

文件描述符名称常用缩写默认值
0标准输入stdin键盘
1标准输出stdout屏幕
2标准错误输出stderr屏幕

我们在简单地用 <  > 时,相当于使用 0<  1> (下面会详细介绍)。

管道 (“|”, pipe line),把上一个命令的 stdout 接到下一个命令的 stdin;

tee 命令的作用是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;

简单重定向

  • cmd > file
把cmd命令的输出重定向到文件file中。如果file已经存在,则清空原有文件,使用bash的 noclobber选项可以防止覆盖原有文件。
  • cmd >> file
把cmd命令的输出重定向到文件file中,如果file已经存在,则把信息加在原有文件后面。
  • cmd < file
使cmd命令从file读入
  • cmd << text
从命令行读取输入,直到一个与text相同的行结束。除非使用引号把输入括起来,此模式将对输入内容进行shell变量替换。如果使用 <<- ,则会忽略接下来输入行首的tab,结束行也可以是一堆tab再加上一个与text相同的内容,可以参考后面的例子。
  • cmd <<< word
把word(而不是文件word)和后面的换行作为输入提供给cmd。
  • cmd <> file
以读写模式把文件file重定向到输入,文件file不会被破坏。仅当应用程序利用了这一特性时,它才是有意义的。
  • cmd >| file
功能同>,但即便在设置了 noclobber时也会覆盖file文件,注意用的是|而非一些书中说的!,目前仅在csh中仍沿用>!实现这一功能。

使用文件描述符的重定向

使用文件描述符的重定向都使用了&符号。

cmd >&n把输出送到文件描述符n
cmd m>&n把输出 到文件符m的信息重定向到文件描述符n
cmd >&-关闭标准输出
cmd <&n输入来自文件描述符n
cmd m<&nm来自文件描述各个n
cmd <&-关闭标准输入
cmd <&n-移动输入文件描述符n而非复制它。(需要解释)
cmd >&n-移动输出文件描述符 n而非复制它。(需要解释)
Note.gif
注意: 
>&实际上复制了文件描述符,这使得 ls > dirlist 2>&1ls 2>&1 > dirlist的效果不一样。 man bash的Redirection节中提及了这段内容。

重定向的组合应用

cmd 2>file把文件描述符2重定向到file,即把错误输出存到file中。
cmd > file 2>&1把标准错误重定向到标准输出,再重定向到file,即stderr和stdout都被输出到file中
cmd &> file功能与上一个相同,更为简便的写法。
cmd >& file功能仍与上一个相同。
cmd > f1 2>f2把stdout重定向到f1,而把stderr重定向到f2
tee files把stdout原样输出的同时,复制一份到files中。
tee files把stderr和stdout都输出到files中,同时输出到屏幕。

重定向实例

Template:Bash重定向实例

类似重定向的功能

下面的一些用法并不属于重定向的范畴,但和重定向较为类似。

进程替换

bash在某些系统中的特性,可以将输入输出转到另一个程序中去,可以同时输出个多个程序,使用方法是>(list)<(list),如[1]

wget -O - http://example.com/dvd.iso \
       | tee >(sha1sum > dvd.sha1) \
             >(md5sum > dvd.md5) \
       > dvd.iso

巧妙地同时完全了SHA-1和MD5校验工作。


参考资料

  1. ↑ tee invocation
  • Bash Quick Reference(ISBN: 0596527764)
  • http://blog.csdn.net/woso/archive/2007/04/04/1551790.aspx
  • http://guocongbin.iblog.com/post/1964/467666

http://www.niftyadmin.cn/n/2525437.html

相关文章

Unity Shader PostProcessing - 1 - 后处理概念

(加粗的内容需要留意) 什么叫PostProcessing&#xff1f; Post Processing 中文直译&#xff1a;后处理&#xff08;以前我是不知道是怎么回事&#xff0c;总觉得好高端的感觉&#xff0c;-_-&#xff09; 我们知道&#xff1a;在场景的所有需要渲染的对象&#xff0c;渲染完后…

文件描述符和文件流之间的转换

文件描述符和文件流之间的转换 2009-11-24 17:30 345人阅读 评论(0) 收藏 举报streamfilesocketFILE *fdopen(int fildes, const char *type); 这个函数很有用的&#xff0c;功能是将一个流关联到一个打开的文件号filedes上&#xff0c; 该filedes可以是open、pipe、dup、dup2…

Unity Shader PostProcessing - 2 - 边缘检测

边缘检测的算法有很多种 这里介绍的是其中的一部分 SobelPrewittRobertLine 这些卷积核&#xff0c;都是final g越大&#xff0c;越可能是边缘 Sobel (-1,1), (0,1), (1,1)与(-1,-1),(0,-1),(1,-1)的亮度差距越大&#xff0c;特别是左右、上下的差异越大&#xff0c;则final…

switch表达式类型

switch表达式类型 一般格式&#xff1a; switch &#xff08;表达式&#xff09; &#xff5b; case 常量标号1&#xff1a;语句序列1; break; case 常量标号2&#xff1a;语句序列2; break; … case 常量标号n&#xff1a;语句序列n; break; default&#xff1a; 语句S; &…

iOS开发系列之运动事件

前面我们主要介绍了触摸事件以及由触摸事件引出的手势识别&#xff0c;下面我们简单介绍一下运动事件。在iOS中和运动相关的有三个事件:开始运动、结束运动、取消运动。 监听运动事件对于UI控件有个前提就是监听对象必须是第一响应者&#xff08;对于UIViewController视图控制器…

C语言 side effect 和 sequence point

C语言 side effect 和 sequence point 2011-09-18 16:16 126人阅读 评论(0) 收藏 举报语言cobject编译器functionfileC 语言中&#xff0c;术语副作用&#xff08;side effect&#xff09;是指对数据对象或者文件的修改。例如&#xff0c;以下语句 var 99;的副作用是把…

L3-005. 垃圾箱分布

L3-005. 垃圾箱分布 题目链接&#xff1a;https://www.patest.cn/contests/gplt/L3-005 Dijstra 与L2-001.紧急救援类似&#xff0c;是Dijstra最短路的拓展&#xff0c;要注意排序是按照&#xff1a; 1.到所有居民点的最小距离的最大&#xff1b; 2.平均距离最短&#xff1b; 3…

java-对象的理解-对象在内存的存储

String str; 这段代码表示创建一个名叫str的String类型的reference。 这个reference保存在栈stack中&#xff0c;速度很快&#xff0c;但它并没有保存词或者句子的数据&#xff0c;它仅仅是目标数据的一个指向。 如果此时向str发送一个消息&#xff0c;就会返回一个运行时错误&…