如何在 Linux 中将 标准错误 重定向到 标准输出

查看nginx的配置信息的时候,发现 nginx -V 的输出不是在标准输出中,而是在错误输出中。通过重定向可以把,标准错误输出定向到标准输出中。

标准错误 重定向到 标准输出

2>&1
# nginx -V 2>&1 | tr " " "\n"  | grep "http.v2"

一个具体的实例

首先创建一个空的文件夹,里面只有一个文件 a.txt ,执行以下命令

tree
.
└── a.c
# 当前文件一直有 a.c

ls -l a.c b.c
ls: cannot access 'b.c': No such file or directory
-rw-r--r-- 1 root root 0 Oct 10 11:11 a.c
# 因为没有b.c文件,所以上面两行输出,一个是在错误输出,一个是标准输出

ls -l a.c b.c > log.txt
ls: cannot access 'b.c': No such file or directory
# 可以看到把输出重定向到 log.txt 的时候,错误的输出没有被重定向

ls -l a.c b.c 2> log.txt
-rw-r--r-- 1 root root 0 Oct 10 11:11 a.c
[root@wpcode.cn tmp]$ cat log.txt
ls: cannot access 'b.c': No such file or directory
# 可以看到 2> 把错误重定向后,标准输出正常的输出了。
 

验证

[root@wpcode.cn tmp]$ ls -l a.c b.c 2>&1 | grep -F "a.c"
-rw-r--r-- 1 root root 0 Oct 10 11:11 a.c
[root@wpcode.cn tmp]$ ls -l a.c b.c 2>&1 | grep -F "b.c"
ls: cannot access 'b.c': No such file or directory

通过管道,grep 可以在标注输入中获取信息,可以获取到 a.c 和 b.c 的输出信息,所以 说明 通过 2>&1 可以把错误信息,重定向到了标准输出中。

如果不进行错误输出的重定向,错误信息正常的输出

ls -l a.c b.c  | grep -F "a.c"
ls: cannot access 'b.c': No such file or directory
-rw-r--r-- 1 root root 0 Oct 10 11:11 a.c

所以这里会看到两行的信息。第一个行是正常输出的错误信息,第二行是 grep 输出的信息。