查看源代码
出自Linux Wiki
对
Bash的输入输出重定向
的源代码
根据以下的原因,您无权限进行编辑这个页面操作:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
使用[[Bash]]可以方便的用<和>实现输出输入的重定向,本文讨论重定向的一些细节和技巧。本文介绍部分是对Bash Quick Reference相关内容的翻译。 == 基础知识== '''[[wpcn:文件描述符|文件描述符]](File Descriptor)''',是进程对其所打开文件的索引,形式上是个非负整数。类 Unix 系统中,常用的特殊文件描述符如下: {| |- | '''文件描述符''' || '''名称''' || '''常用缩写''' || '''默认值''' |- | 0 || 标准输入 || stdin ||键盘 |- | 1 || 标准输出 || stdout || 屏幕 |- | 2 || 标准错误输出 || stderr ||屏幕 |} 我们在简单地用<tt> < </tt>或<tt> > </tt>时,相当于使用<tt> 0< </tt> 或<tt> 1> </tt>(下面会详细介绍)。 ''' [[wpcn:管道_(Unix)|管道]] (“|”, 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<&n || m来自文件描述符n |- | cmd <&- || 关闭标准输入 |- | cmd <&n- ||移动输入文件描述符n而非复制它。(需要解释) |- | cmd >&n- || 移动输出文件描述符 n而非复制它。(需要解释) |} {{Note| >&实际上复制了文件描述符,这使得'''ls > dirlist 2>&1'''与'''ls 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 |- | cmd | tee files || 把stdout原样输出的同时,复制一份到files中。 |- | cmd 2>&1 | tee files || 把stderr和stdout都输出到files中,同时输出到屏幕。 |} ==重定向实例== {{Bash重定向实例}} ==类似重定向的功能== 下面的一些用法并不属于重定向的范畴,但和重定向较为类似。 ===进程替换=== bash在某些系统中的特性,可以将输入输出转到另一个程序中去,可以同时输出个多个程序,使用方法是''>(list)''或''<(list)'',如<ref>[http://www.gnu.org/software/coreutils/manual/html_node/tee-invocation.html tee invocation]</ref>: <source lang="bash"> wget -O - http://example.com/dvd.iso \ | tee >(sha1sum > dvd.sha1) \ >(md5sum > dvd.md5) \ > dvd.iso </source> 巧妙地同时完全了[[wpen:SHA1|SHA-1]]和[[wpen:MD5|MD5]]校验工作。 ==参考资料== <references /> * Bash Quick Reference(ISBN: 0596527764) * http://blog.csdn.net/woso/archive/2007/04/04/1551790.aspx * http://guocongbin.iblog.com/post/1964/467666 [[Category: Bash]] [[Category: Linux基础]]
在这个页面上使用的模板有:
Template:Bash重定向实例
(
查看源码
)
Template:Note
(
查看源码
)
返回到
Bash的输入输出重定向
。
导航
首页
社区入口
当前事件
最近更改
随机页面
帮助
查看
页面
讨论
查看源代码
历史
个人工具
登录/创建账户
搜索
简体繁体转换
不转换
简体
繁體
工具箱
链入页面
链出更改
特殊页面