您如何记住2>&1重定向的语法[关闭]


12

您是否有助记符或系统?这困扰了我很多年,我总是必须查一下

Answers:


19

如果您是C程序员,则可以将其&1视为“ 1的地址”,因此请2>&1读取“将文件描述符#2重定向到与#1相同的位置”。


不知道是否有帮助...助记符是相当个人的东西。
lgeorget 2014年

+12这也是正在发生的事情的正确描述。
斯特凡Chazelas

1
我想知道它是怎么被发明的(“ 1的地址”)。由于有些人在发明C语言和UNIX时做出了巨大贡献,因此有可能
lgeorget 2014年

1
我可能会改用它;)
goldilocks 2014年

3

对我而言,“二对一”(“ to”为>)比“二对一”更合乎逻辑,这就是我通常会混淆的地方。如果您将“和一个”视为一个名词(一个地方),那么它在上下文中也具有语法意义,这与“两个和一个”更难做到-您必须考虑“一个”名词,它仍然没有上下文意义。


2
我不明白
Matt

2

这不是助记符,但我阅读如下:

0是stdin。 1是标准输出。 2是stderr。 >进入。 <没了。 &是文件描述符(在某些shell中)。

2>&1
2      >    &               1
stderr into file descriptor 1

redirect stderr into stdout

如果在重定向之前弄乱了任何文件描述符,它可能会改变...

2>somefile 1>&2
2      >    somefile     1      >    &2
stderr into somefile and stdout into file descriptor 2

redirect stderr into somefile and stdout into somefile. 

2

当您编写时2>&1,您说的是“标准错误进入标准输出”。

让我们分解一下。

首先,您要记住标准误差为2,标准输出为1

所以你有2一些东西1

写着“去” >

所以你有2>一些东西1

2>filename表示将标准错误发送到filename。但是您不想将其发送到名为的文件中1。您还需要其他东西:已经打开的文件号。那&是为了什么。

所以2>&1

您也可以像做作业一样想到它,其中>就像一个等于,而&就像一个$,进行比较:

f=$1
2>&1

要了解具有多个重定向的命令行,需要了解的重要一点是重定向是从左到右完成的。有关更多详细信息,请参见重定向顺序


0

我记得它总是2-> 1. Stderr到stdout。

中间的部分总是硬的,我总是把它弄糟,直到我想起首先出现的是尖锐的角色>,然后才是我在现实生活中无法写的角色&

所以永远不要2&>1,总是2>&1


0

如果您了解FD2是STDERR,您可能会想:“哦,在我发送STDOUT(FD1)的任何地方捕获STDERR”。


0

我和我的同事通常说“二大于一”,因为我们大多数人并不总是记住那stderr是文件描述符2并且stdout1(尤其是那些对于unix / linux而言是新的),因此关于重定向的其他助记符stderr并没有真正起作用。唯一的问题是,您仍然必须记住&符的位置!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.