2>&1 >&0 这些是啥意思?

sh/bash/dash/ksh/zsh等Shell脚本
回复
死亡阴影
帖子: 130
注册时间: 2007-11-28 8:52
联系:

2>&1 >&0 这些是啥意思?

#1

帖子 死亡阴影 » 2008-10-21 14:54

首先是原文描述
n<&- 关闭输入文件描述符 n.
0<&-, <&- 关闭 stdin.
n>&- 关闭输出文件描述符 n.
1>&-, >&- 关闭 stdout.

子进程继承了打开的文件描述符. 这就是为什么管道可以工作. 如果想阻止 fd 被继承, 那么可
以关掉它.


exec 3>&1 # 保存当前 stdout 的"值".

ls -l 2>&1 >&3 3>&- | grep bad 3>&- # 对'grep'关闭 fd 3(但不关闭'ls').

exec 3>&-



我的测试如下:
ls -l 2>&1 >&3 3>&- | grep test #成功禁止了grep
ls -l 2>&1 >&3| grep test #成功禁止了grep
ls -l 2>&1 | grep test #成功禁止了grep
ls -l 2>&1 >&0 | grep test #禁止了grep ,0 1 2 3 都有显示,4就错误了

ls -l 2>&1- | grep test #啥也没
ls -l 2>&2- | grep test #grep出来了


:em20
没搞明白他们的逻辑关系,请问各位大大是怎么回事阿~~
头像
windwiny
帖子: 2254
注册时间: 2007-03-13 17:26

Re: 2>&1 >&0 这些是啥意思?

#2

帖子 windwiny » 2008-10-21 15:35

这有什么用??


有需求的时候再去学这些东西


pg 1> /tmp/log.std # 标准输出 stdout改向
pg 2> /tmp/log.err # 标准错误 stderr改向
pg &> /tmp/log # 上面两个一起改向 stdout,stderr
pg >> /tmp/log # 标准输出改向追加
pg 1>> /tmp/log 2>&1 # 标准输出,错误改向追加
死亡阴影
帖子: 130
注册时间: 2007-11-28 8:52
联系:

Re: 2>&1 >&0 这些是啥意思?

#3

帖子 死亡阴影 » 2008-10-21 20:22

pg的使用没看懂... :em06
其实最大的问题在于
1>&1
2>&2
1>&1-
的&1,&1- 和前面的0 1 2是啥?
头像
c\nc
帖子: 231
注册时间: 2007-12-25 12:51

Re: 2>&1 >&0 这些是啥意思?

#4

帖子 c\nc » 2008-10-21 21:23

那些是FD,楼主要去查资料了,这里说不清楚的。
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

Re: 2>&1 >&0 这些是啥意思?

#5

帖子 yjcong » 2008-10-21 21:36

我在想当时, linus设计linux结构的时候, 有想到这些吗?还是后来补充上去的?
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
死亡阴影
帖子: 130
注册时间: 2007-11-28 8:52
联系:

Re: 2>&1 >&0 这些是啥意思?

#6

帖子 死亡阴影 » 2008-10-25 11:27

现在有一定的了解了,我会把我探索到的于大家分享
回复