Linux中的错误重定向你真的懂吗

编程

在很多定时任务里、shell里我们往往能看到 "2>&1",却不知道这背后的原理。

举个例子:

* 1 * * * test.sh > /dev/null 2>&1

这里的”2>&1“的意思是把标准错误重定向到标准输出。

0:代表标准输入

1:代表标准输出

2:代表标准错误

上面的例子"2>&1"已经知道是将标准错误重定向到标准输出,而test.sh的标准输出就是/dev/null,所以这条语句的结果(标准输出、标准错误)都会打到/dev/null。

用c来表示可以更加清楚细节:

int fd = open("/dev/null", "w+");

dup2(fd, 1); # 将标准输出重定向至/dev/null

dup2(1, 2); # 将标准错误重定向至标准输出

我们调换一下/dev/null和2>&1的位置:

* 1 * * * test.sh 2>&1 > /dev/null

这里表示先将标准错误重定向至标准输出,再将标准输出重定向至/dev/null。这样的结果就是还能看见标准错误

用c来表示下细节:

int fd = open("/dev/null", "w+");

dup2(1, 2); # 将标准错误重定向至标准输出

dup2(fd, 1); # 将标准输出重定向至/dev/null

可能看了上面的例子还是一脸懵圈,我举几个例子:

# 假设table不存在

ls table 2>&1

# 报错,并在标准输出(终端)展示

ls table > /dev/null 2>&1

# 报错,标准错误重定向到标准输出。而标准输出被/dev/null给占据了,所以错误进了/dev/null

ls table 2>&1 > /dev/null

# 报错,标准输出指向/dev/null。而标准错误任然重定向至标准输出,所以能在终端看到错误输出

"欢迎关注我的公众号「编程感悟」,一起交流讨论"

以上是 Linux中的错误重定向你真的懂吗 的全部内容, 来源链接: utcz.com/z/512575.html

回到顶部