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 ...
随机推荐
- @Responsebody与@RequestBody
前台发送请求后台用什么接收-->@RequsetMapping 何时使用@ResponseBody-->一般在异步获取数据时使用,后台传的数据切成ison传给前台 @Responsebod ...
- linux第1天 fork exec 守护进程
概念方面 文件是对I/O设备的抽象表示.虚拟存储器是对主存和磁盘I/O设备的抽象表示.进程则是对处理器.主存和I/O设备的抽象表示 中断 早期是没有进程这个概念,当出现中断技术以后才出现进程这个概念 ...
- mysql中查询值为NULL的记录
例如表A中的user_login_name的值为NULL,用mysql语句把这条记录查询出来,用select user_login_name from A where user_login_name ...
- PHP商品秒杀倒计时
<?php //php的时间是以秒算.js的时间以毫秒算 date_default_timezone_set('PRC'); //date_default_timezone_set(" ...
- Oracle的导入导出
写批处理文件的基础知识 http://blog.chinaunix.net/uid-20672257-id-3056546.html http://wenku.baidu.com/view/db9c5 ...
- Windows 7 64位下使用ADB驱动
早上在cmd输入adb devices想查询正在执行的虚拟器有多少个,但是执行结果出现 C:\Users\Administrator>adb deviceserror: C:\Users\Adm ...
- HTTP错误汇总(404、302、200……)
HTTP 400 - 请求无效HTTP 401.1 - 未授权:登录失败HTTP 401.2 - 未授权:服务器配置问题导致登录失败HTTP 401.3 - ACL 禁止访问资源HTTP 401.4 ...
- 高并发 php uniqid 用md5生成不重复唯一标识符方案
高并发 php uniqid 用md5生成不重复唯一标识符方案uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.uniqid(prefix,more_entropy)prefix 可 ...
- JSP直接连接sql2008数据库并显示
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage=&qu ...
- 14 个 grep 命令的例子 【转】
转自:https://linux.cn/article-5453-1.html 编译自:http://www.linuxtechi.com/linux-grep-command-with-14-dif ...