Bash重定向
1. 基础知识
文件描述符(File Descriptor),是进程对其所打开文件的索引,形式上是个非负整数。类 Unix 系统中,常用的特殊文件描述符如下:
| 文件描述符 | 名称 | 常用缩写 | 默认值 |
| 0 | 标准输入 | stdin | 键盘 |
| 1 | 标准输出 | stdout | 屏幕 |
| 2 | 标准错误输出 | stderr | 屏幕 |
我们在简单地用 < 或 > 时,相当于使用 0< 或 1> (下面会详细介绍)。
管道 (“|”, pipe line),把上一个命令的 stdout 接到下一个命令的 stdin;
tee 命令的作用是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;
2. 简单重定向
- 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中仍沿用>!实现这一功能。
3. 使用文件描述符的重定向
使用文件描述符的重定向都使用了&符号。
| cmd >&n | 把输出送到文件描述符n |
| cmd m>&n | 把输出 到文件符m的信息重定向到文件描述符n |
| cmd >&- | 关闭标准输出 |
| cmd <&n | 输入来自文件描述符n |
| cmd m<&n | m来自文件描述符n |
| cmd <&- | 关闭标准输入 |
| cmd <&n- | 移动输入文件描述符n而非复制它。(需要解释) |
| cmd >&n- | 移动输出文件描述符 n而非复制它。(需要解释) |
注意: >& 实际上复制了文件描述符,这使得ls > dirlist 2>&1与ls 2>&1 > dirlist的效果不一样。
4. 重定向的组合应用
| 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中,同时输出到屏幕。 |
5. 重定向实例
Bash重定向的更多相关文章
- BASH重定向问题
APUE 3.5关于重定向有个容易迷惑人的问题: ./a.out > outfile 2>&1 ./a.out 2>&1 > outfile 问两者区别? in ...
- printf 遇到bash重定向
在printf之前添加:setvbuf(stdout,NULL,_IONBF,0);设置缓冲区为空. 在每句printf之后添加:fflush(stdout); 方法一: 1 2 3 4 5 6 7 ...
- linux bash的重定向
cnblogs原创 下面几种bash重定向各表示什么意思? find / -name passwd > /dev/null >& > /dev/null find / -na ...
- Linux 总结1
============================= 一般 ========================================= chown -R oracle:oinstall ...
- admin-5
Admin05 useradd 添加用户usermod 修改用户属性userdel -r 删除用户 groupadd 添加组gpasswd -a | -d | 管理组成员groupdel 删除组gro ...
- Linux下中断程序导致写文件失败的分析
案例: 一个普通linux C程序,执行期间会进行多次printf操作,利用bash脚本重定向功能,将stdout重定向到一个另一个文件中去.在运行途中用ctrl+C终止程序,发现定向文件始终为空,即 ...
- linux中文件描述符
:: # cat ping.txt PING baidu.com (() bytes of data. bytes from ttl= time=32.1 ms bytes from ttl= tim ...
- NCcat学习使用
一.使用手册 1.简介:nc/NetCat是一款端口监听工具,可以用来建立系统之间的连接.传输文件.TCP代理等. 2.命令参数 nc [-options] hostname port[s] ...
- shell 中cut
和awk差不多的功能 上面的例子中,把 root:x:0:0:root:/root:/bin/bash 重定向到cut命令里,-d表示分隔符,这里使用冒号: 作为分隔符,-f 表示字段,选择了第1,和 ...
随机推荐
- java 冒泡排序 二分查找 选择排序 插入排序
下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...
- ng-show和ng-if的区别和使用场景
一.ng-show(ng-hide)和ng-if都是控制标签的显示和隐藏,为什么angularjs会定义两个指令来供我们使用呢,不多多说肯定有各自的使用场景,接下来我们看哈实际原理: ng-show实 ...
- 1129 Recommendation System
1129 Recommendation System (25 分) Recommendation system predicts the preference that a user would gi ...
- css3种引入方式,样式与长度颜色,常用样式,css选择器
# CSS三种引入方式 ## 一.三种方式的书写规范 #### 1.行间式 ```html<div style="width: 100px; height: 100px; backgr ...
- 如何将指定文件或文件夹直接提交到svn指定目录
以下步骤适用于客户端是Tortoisesvn 服务端是VisualSVN Server的SVN库: 安装Tortoisesvn 获取配置库路径 checkout想要提交到的SVN库或目录 将需要提交 ...
- Android FragmentActivity 嵌套 Fragment 调用startActivityForResult返回的requestCode错误
Android FragmentActivity 嵌套 Fragment 调用startActivityForResult返回的requestCode错误 此时,要在调用startActivityFo ...
- node linux
在linux下安装nodejs 教程:http://my.oschina.net/blogshi/blog/260953 连接linux服务器,supervisor bin/www,断开连接,服务器还 ...
- jQuery插件初级练习3答案
html: $("p").fontcolor().html("qaq") jQuery: $.fn.extend({ fontcolor:function(){ ...
- 第二天:Javascript事件
事件:是可以被Javascript侦测到的行为,例如鼠标的点击,鼠标的移动,常见的事件如下 代码实现“点击事件”: <body> <button onclick="de ...
- [LintCode] 拓扑排序
http://www.lintcode.com/zh-cn/problem/topological-sorting/# 给定一个有向图,图节点的拓扑排序被定义为: 对于每条有向边A--> B,则 ...