2012-02-22 65 views
7

我想知道什么的&意味着在声明中:什么2> 1>的/ dev/null,并且2>&1>/dev的差异/空

2>&1 > /dev/null 

其重定向错误输出到标准输出,然后到位桶,但什么&在里面?

我可以用它像:

2>1 >/dev/null 
+2

当然,如果你想输出stderr到一个名为“1”的文件。 – cHao 2012-02-22 06:33:18

+1

这是否有帮助http://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/ – KK99 2012-02-22 06:33:20

+0

@cHao:有你的观点。 – kailash19 2012-02-22 06:49:01

回答

7

&意味着文件描述符。所以2>&1标准错误重定向到任何标准输出当前指向的,而2>1 stderr重定向到一个名为1

此外,重定向,以便发生文件。因此,如果您说2>&1 >/dev/null,它会重定向stderr以指向stdout当前指向哪个(可能是noop),然后将stdout重定向到/ dev/null。你可能想要>/dev/null 2>&1

+0

因此,&告诉FD。在我脑海中查询:那么为什么我们没有在2(stderr)的情况下使用它? ow shell知道2(没有&)是FD吗? – kailash19 2012-02-22 06:46:19

+0

你是什么意思?无论您用于“fd”插槽的编号是什么,语法都是fd> file或fd>&fd。 – tripleee 2012-02-22 06:55:43

+1

kailash19:重新阅读上述帖子。请注意,'... while 2> 1将stderr重定向到名为1'的文件中。所以试试看:'printf'xxx \ n“2> 1; ls -l 1'。文件在那里(但是空的),并且xxx出现在你的屏幕上。将stderr输出重定向到一个文件,比如'myCmd 2> /tmp/myCmd.stderr.out.txt',是合法的,对吗?但这与操纵标准输出'&1'和标准错误'&2'不同。这不是一个完全直观的语法。因为我不需要经常使用它,即使年龄大于10岁,如果我想要做一些新的或不同的事情,我仍然需要查看它。祝你们好运。 – shellter 2012-02-22 16:40:26