shell 中的>文件重定向符 和 标准输入、输出、错误以及 2&1 的含义*
1.问:其中 的2>&1是怎么回事?
. test.sh > test.log 2>&1
2.答:>和<是 文件重定向符。
在shell中,每个进程都和三个系统文件相关联:
- 标准输入stdin,文件描述符为0
- 标准输出stdout,文件描述符为1
- 标准错误stderr,文件描述符为2
所以这里2>&1的意思就是将标准错误也输出到标准输出当中。
3.示例
下面通过一个例子来展示2>&1有什么作用:
1,准备一个脚本test.sh,内容如下:
t
date
test.sh中包含两个命令,其中t是一个不存在的命令,执行会报错,默认情况下,错误会输出到stderr。date则能正确执行,并且
输出时间信息,默认输出到stdout.
2,执行比较
命令 |
终端打印 |
文件内容 | 注释 |
. test.sh |
t:未找到命令 |
无输出 | 无文件 |
. test.sh > test.log |
t:未找到命令 |
2016年 11月 08日 星期二 13:34:32 CST |
可以看到,date的执行结果被重定向到log文件中了, 而t无法执行的错误则只打印在屏幕上。 |
| . test.sh > test2.log 2>&1 | 无输出 | t:未找到命令 2016年 11月 08日 星期二 13:45:56 CST |
这次,stderr和stdout的内容都被重定向到log文件中了。 |
实际上, > 就相当于 1> 也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了(stderr已作为
stdout的副本),那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。如果只想重定向标准错误到文件中,则可以使
用2> file。
那么如何将标准错误输出重定向到一个文件的同时在屏幕上也显示?
[root@home root]# id fdfd 2>&1 |tee logfile
id: fdfd: No such user
[root@home root]# cat logfile
id: fdfd: No such user
管道的用途是把进程的标准输出连接到另一个进程的标准输入,2>&1是把标准错误作为标准输出的副本。在楼顶那个命令里,把标
准输出和标准错误都输出作为tee命令的标准输入,tee的用途是把标准输入的副本拷贝到文件,并输出。不要混淆管道与重定向,
这是两个不同的概念。
shell 中的>文件重定向符 和 标准输入、输出、错误以及 2&1 的含义*的更多相关文章
- Linux中的文件描述符与打开文件之间的关系
Linux中的文件描述符与打开文件之间的关系 导读 内核(kernel)利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描 ...
- Linux中的文件描述符与打开文件之间的关系------------每天进步一点点系列
http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件. ...
- (转)Linux中的文件描述符
本文转自:http://blog.csdn.net/cywosp/article/details/38965239 作者:cywosp 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为 ...
- [svc]linux中的文件描述符(file descriptor)和文件
linux中的文件描述符(file descriptor)和文件 linux为了实现一切皆文件的设计哲学,不仅将数据抽象成了文件,也将一切操作和资源抽象成了文件,比如说硬件设备,socket,磁盘,进 ...
- (转)Linux中的文件描述符与打开文件之间的关系
转:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文 ...
- linux内核中的文件描述符(二)--socket和文件描述符
http://blog.csdn.net/ce123_zhouwei/article/details/8459730 Linux内核中的文件描述符(二)--socket和文件描述符 Kernel ve ...
- java-----遇到问题------myeclipse----发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误
情况 myeclipse发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误. 这种情况一般是 .classpath文件设置的输出路径不对导致的. 1.. ...
- My way on Linux - [Shell基础] - Bash Shell中判断文件、目录是否存在或者判断其是否具有某类属性(权限)的常用方法
Conditional Logic on Files # 判断文件是否存在及文件类型 -a file exists. #文件存在 -b file exists and is a block speci ...
- linux shell 学习笔记--文件测试符
. 文件测试操作 ---------------- 返回true 如果... -e 文件存在 -a 文件存在 这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用 -f file 是一个re ...
随机推荐
- CSS_03_01_CSS选择器中单选择器:关联选择器档
选择器中单选择器:关联选择器档 第01步:编写select.css @charset "utf-8"; /* span标签中的b标签的exam类 */ span b.exam{ b ...
- 夺命雷公狗ThinkPHP项目之----企业网站22之网站前台中间层(解决代码冗余)
我们如果这样写代码虽然可以实现头部二级分类的显示,但是如果再别的控制器下那么会出现显示不了.. 如果再加多一段一样的代码也可以实现出一样的效果: 但是这样会导致代码冗余现象,所以我们为了解决这个问题, ...
- 夺命雷公狗---微信开发62----所以memcache对access_token进行全局缓存优化
公众号调用接口并不是无限制的,为了防止公众号的程序错误而引发微信服务器负载异常,默认情况下, 每个公众号调用接口都不能超过一定限制,当超过一定限制时,调用对应接口会收到错误信息,造成调用失败. 我们也 ...
- 有关git的换行符的处理问题
签入签出时对换行符的操作: #签出时将LF转换为CRLF,签入时将CRLF转换为LF git config --global core.autocrlf true #签出时不转换,签入时转换为LF g ...
- 开启xp_cmdshell
--打开xp_cmdshell EXEC sp_configure 'show advanced options', 1GORECONFIGUREGOEXEC sp_configure 'xp_cmd ...
- Yii增删改查操作
增: 1 第一种 $post=new Post; $post->title='sample post'; $post->content='content for the sample po ...
- Junit单步调试
单步调试:主要查看变量内容的变化 1.设置断点位置,设置在可能出现问题的代码 2.点击项目右键以Debug as方式运行程序 3.F5 --> step into 进入方法内部进行调试 ...
- HashMap存值
package com.exmple.tool; import java.util.HashMap; public class UserTool { public static HashMap< ...
- maven相关
1. 创建/导入maven项目时 eclipse默认jdk版本配置:http://blog.csdn.net/lzj0470/article/details/42292021 2. eclipse 使 ...
- andoid下的股票行情开发
1.信息类 public class SinaStockInfo { /** * Sina股票数据接口 以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据 * 接 ...