专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>shell技巧/应用篇>

shell编程里“2>&1"的意思是什么?

百度收藏 QQ搜藏

在很多shell例子里看到,有"2>&1 >/dev/null"的写法,
例如“/usr/lib/acct/ckpacct > /dev/null 2>&1“有谁能解释下吗?

     关于, & 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result ,然后复制标准输出到文件描述符2(STDERR_FILENO),其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出被合并了。
     也就是把错误的输出定向到正确的地址里面,本来在shell里面:
./xxx  >>  ./log这是说把正确的执行过程写入log里面,但是如果xxx的执行有错,或者xxx本身的输入就是定向到错误输出的,比如说oralce里面的exp和imp命令,那就的要这样写:
./xxx  >>   ./log  2>&1 表示把错误输出也写到log里面 ,2(错误),&1正确输出的地址,也就是你定义的log的地址
   在c程序中的stdout就输出成1,stderr就输出成2。

注:
0表示键盘输入
1表示屏幕输出
2表示错误输出

上一篇:在执行SHELL程序时隐藏光标 下一篇:while用到重定向的困惑(sh的陷阱)

power by soyo123 2007-2008