书是这么说的
1>&2 将命令的标注输出重定向到标准错误输出
2>&1 声明文件描述符2为文件描述符1的副本
<&m 从文件描述符m复制标准输入
[n]>&m 从文件描述符复制标准输入或者文件描述符n(如果命令中指定了n)
[n]<&- 关闭标准输入或者文件描述符n(如果指定了n)
[n]>&- 关闭标准输出或者文件描述符n(如果指定了n)
书中描述我看不明白……他也没有举具体的例子,请问哪个大侠可以帮忙通过例子来解释一下?
请问1>&2 2>&1 <&m [n]>&m [n]<&- [n]>&-的作用和区别
-
- 帖子: 76
- 注册时间: 2010-11-27 22:20
-
- 帖子: 76
- 注册时间: 2010-11-27 22:20
Re: 请问1>&2 2>&1 <&m [n]>&m [n]<&- [n]>&-的作用和区别
是不是太难了?还是这表示法根本不存在?
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 请问1>&2 2>&1 <&m [n]>&m [n]<&- [n]>&-的作用和区别
自己去看,动手试试,真不明白再问。
http://www.cnblogs.com/chengmo/tag/shell/
http://www.cnblogs.com/chengmo/tag/shell/
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 8
- 注册时间: 2011-04-07 21:47
Re: 请问1>&2 2>&1 <&m [n]>&m [n]<&- [n]>&-的作用和区别
其实很简单,首先默认情况下0,1,2是stdin, stdout, stderr的fd, 然后< > 分别是重定向输入及输出
使用时要确认当前的fd是指向哪里的,因为有可能0,1,2之前被重定向过了
eg: echo Hello >/dev/null 这里stdout指向了/dev/null所以没有输出
echo Hello 1>&2 这里stdout指向了stderr, 也没有输出,但在log文件里可以看到
printf "%v\n error"> testfile 2>&1 这里stdout指向了testfile, 之后stderr重定向到stdout的当前位置,也就是testfile
这里也可以直接用&>>testfile 将stdout及stderr都指向同一个文件testfile
可以自己指定文件描述符,比如
Swap Standard Output and Standard Error,通过指定fd 3实现
$ command 3>&2 2>&1 1>&3
至于关闭重定向那个就是字面意思了,比较简单
使用时要确认当前的fd是指向哪里的,因为有可能0,1,2之前被重定向过了
eg: echo Hello >/dev/null 这里stdout指向了/dev/null所以没有输出
echo Hello 1>&2 这里stdout指向了stderr, 也没有输出,但在log文件里可以看到
printf "%v\n error"> testfile 2>&1 这里stdout指向了testfile, 之后stderr重定向到stdout的当前位置,也就是testfile
这里也可以直接用&>>testfile 将stdout及stderr都指向同一个文件testfile
可以自己指定文件描述符,比如
Swap Standard Output and Standard Error,通过指定fd 3实现
$ command 3>&2 2>&1 1>&3
至于关闭重定向那个就是字面意思了,比较简单