📅  最后修改于: 2023-12-03 14:38:49.651000             🧑  作者: Mango
在Linux和Unix系统中,2>&1是一种用于重定向命令输出的方法。它是将错误输出(STDERR)流转为标准输出(STDOUT)流的方法,然后一起输出到屏幕或重定向到其他文件中。
命令 2>&1
该命令执行时,错误输出(STDERR)将与标准输出(STDOUT)合并,将一同输出到终端或者重定向到其他文件中。
以下是一个例子:
ls -l /not/exist/file 2>&1
该命令执行过程中,由于没有该文件,会出现错误输出(STDERR),但是使用了2>&1的重定向,使得错误输出和标准输出一同输出,结果将如下所示:
ls: cannot access /not/exist/file: No such file or directory
2>&1经常用于重定向一些脚本的输出。正常情况下我们不希望脚本输出太多信息,但是一旦出错就希望尽可能地输出所有错误信息。使用2>&1,我们可以把所有错误信息都输出到标准输出(STDOUT),这样就便于我们查看排错了。
下面是一个例子:
./script.sh 2>&1 | tee output.log
该命令执行script.sh脚本,并将错误输出(STDERR)重定向到标准输出(STDOUT),然后使用tee将输出内容同时输出到终端和output.log文件中。这样做就可以方便查看脚本执行的过程和错误信息。
使用2>&1进行重定向时,一定要注意顺序。正确的顺序应该是先写错误输出(STDERR)的编号2,再写输出(STDOUT)的编号1,最后加上重定向符号&。
以下是一个错误的例子:
命令 1>&2 # 错误的重定向顺序
这样写的话,实际上是将输出(STDOUT)重定向到错误输出(STDERR)中,而错误输出(STDERR)则被丢弃了。
2>&1是Linux和Unix系统中常用的一种重定向方法,可以将错误输出(STDERR)转为标准输出(STDOUT),一起输出到终端或者重定向到其他文件中。在脚本编写中,2>&1可以帮助我们方便地查看脚本的执行过程和错误信息。但是使用时需要注意重定向的顺序,以免造成错误。