Pea*_*key 41 linux redirection
我遇到过几个使用2>&1
and 的命令1>&2
,但是我完全搞不清楚使用它的目的以及何时应该使用它。
我的理解
我知道这1
代表标准输出并2
代表标准错误。我知道这2>&1
结合了2
to的输出,1
反之亦然。
我没有得到的
use*_*686 42
有时你想将 stdout和stderr重定向到同一个位置,这>&
是使用的时候——它将一个文件描述符指向另一个。
例如,如果要将 stdout 和 stderr 都写入同一个文件(无论是它/dev/null
还是output.txt
),则可以分别重定向它们,使用
app 1>/dev/null 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
或者您可以将一个文件描述符重定向到该文件,并将另一个文件描述符重定向到第一个:
app 1>/dev/null 2>&1
app 2>/dev/null 1>&2
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,将2>&1
文件描述符 #2 指向 #1 已经指向的位置。第二个示例实现了相同的功能,只是从 stderr 开始。
再举一个例子,在某些情况下,stdout(文件描述符 #1)已经指向所需的位置,但您不能通过名称来引用它(它可能与管道、套接字等相关联)。这在使用进程扩展(` `
或$( )
运算符)时经常发生,它通常只捕获 stdout,但您可能希望在其中包含 stderr。在这种情况下,您还可以使用>&
将 stderr 指向 stdout:
out=$(app 2>&1)
Run Code Online (Sandbox Code Playgroud)
另一个常见的例子是寻呼机,或grep
,或类似的实用程序,因为管道|
通常只在标准输出上工作,你可以在使用管道之前将标准错误重定向到标准输出:
app 2>&1 | grep hello
Run Code Online (Sandbox Code Playgroud)
如何知道哪个2>&1
或哪个1>&2
是正确的?在已经建立的文件描述符去的权利>&
,并且希望重定向文件描述符转到左边。(2>&1
意思是“将文件描述符 #2 指向文件描述符 #1”。)
一些 shell 有常见重定向的快捷方式;以下是来自 Bash 的示例:
1>
可以缩短为 >
1>foo 2>&1
到>&foo
或&>foo
2>&1 | program
到 |& program
归档时间: |
|
查看次数: |
106159 次 |
最近记录: |