案前独忆灯明灭

怕他什么整理无穷, 进一寸有一寸的欢喜

重定向符号 > 2> &> 2>&1 的区别

在 Linux 中, 0 表示 STUIN, 1 表示 STDOUT, 2 表示 STDERR, 3~8 由用户自行定义.

重定向符号 > 表示将送往 STDOUT 的输出重定向到文件, 2> 表示将送往 STDERR 的输出重定向到文件, &> 表示将 STDOUTSTDERR 一同重定向到文件, 2>&1 表示将 STDERR 重定向到 STDOUT 重定向的位置.

下面是几个例子, 首先建立一个Python脚本, 第一行是正常输出(数据流), 第二行会产生错误:

直接运行脚本, 数据和错误都被输出到了屏幕.

使用 > 将数据输出重定向, 则屏幕上只有错误输出. 数据输出重定向到了 log.txt 文件

使用 2> 错误输出重定向, 结果则正好相反, 屏幕上只有数据输出.错误输出重定向到了 log.txt 文件

也可以同时 >2> 将数据输出和错误输出分别重定向. 下面代码将数据输出重定向到了 log1.txt, 将数据输出重定向到了 log2.txt.

如果想把数据输出和错误输出重定向到同一个文件, 还可以采用 &>, 这样屏幕上将不会有输出.

接下来看看 2>&1, 2>&1把错误输出重定向到数据输出. 直接使用 2>&1 和不使用任何重定向没有区别, 因为 STUERR 最终也会流向屏幕.

若先对数据输出进行重定向, 则再使用 2>&1 将会把错误输出重定向到 重定向了的数据输出 (这个有点绕)

如果把 2>&1 写到前面, 则错误会被输出到屏幕, 而数据会被输出到文件.

⬅️ Go back