将命令的输出重定向到文件或通过管道将其传输到另一个命令时,您可能会注意到错误消息打印在屏幕上。
在 Bash 和其他 Linux shell 中,当程序执行时,它使用三个标准 I/O 流。每个流都由一个数字文件描述符表示:
-
0
- stdin
,标准输入流。
-
1
- stdout
,标准输出流。
-
2
- stderr
,标准错误流。
文件描述符只是代表打开文件的数字。
输入流通常通过在键盘中键入来向程序提供信息。
程序输出进入标准输入流,错误消息进入标准错误流。默认情况下,输入流和错误流都会打印在屏幕上。
重定向输出#
重定向是一种捕获程序输出并将其作为输入发送到另一个程序或文件的方法。
可以使用以下命令重定向流n>
运算符,其中n
是文件描述符号。
When n
被省略,则默认为1
,标准输出流。例如,以下两个命令是相同的;两者都会重定向命令输出(stdout
) 到文件。
command > file
command 1> file
重定向标准错误(stderr
) 使用2>
操作员:
command 2> file
你可以两者都写stderr
and stdout
到两个单独的文件:
command 2> error.txt 1> output.txt
要禁止错误消息显示在屏幕上,请重定向stderr
to /dev/null
:
command 2> /dev/null
重定向stderr
to stdout
#
将程序的输出保存到文件时,重定向是很常见的stderr
to stdout
这样您就可以将所有内容都保存在一个文件中。
重定向stderr
to stdout
并将错误消息发送到与标准输出相同的文件,请使用以下命令:
command > file 2>&1
> file
重定向stdout
to file
, and 2>&1
重定向stderr
到当前位置stdout
.
重定向的顺序很重要。例如,以下示例仅重定向stdout
to file
。发生这种情况是因为stderr
被重定向到stdout
之前stdout
被重定向到file
.
command 2>&1 > file
另一种重定向方式stderr
to stdout
是使用&>
构造。在重击中&>
具有相同的含义2>&1
:
command &> file
结论#
在命令行上工作时,理解重定向和文件描述符的概念非常重要。
重定向stderr
and stdout
, 使用2>&1
or &>
结构体。
如果您有任何问题或反馈,请随时发表评论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)