1>&2
是一个在类Unix系统(如Linux)的shell中使用的重定向指令。
在这个指令中:
1
表示标准输出(stdout
),即通常程序打印到屏幕上的输出。2
表示标准错误(stderr
),即程序用来输出错误信息的地方。>&
是一个重定向操作符,用于将一个文件描述符(在这里是标准输出)重定向到另一个文件描述符(在这里是标准错误)。
所以,1>&2
的意思是将标准输出(stdout
)重定向到标准错误(stderr
)。这在想要合并标准输出和标准错误流时很有用,以便它们可以一起被处理或查看。
这个指令通常与其他重定向或管道指令结合使用,以实现更复杂的输出处理。例如,可以使用 command > file 2>&1
来将标准输出和标准错误都重定向到同一个文件中。
PS:
如果你要问,
>&
中的&
是什么意思?
>&
是这个特定操作的一部分,其中 >
表示重定向,而 &
表示后面跟的是另一个文件描述符,而不是一个文件名。所以,>&
是固定的
PPS:
如果你还想问,文件描述符是什么
文件描述符(File Descriptor,简称 FD)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件。所有执行 I/O 操作的系统调用都通过文件描述符完成。程序刚刚启动的时候,默认有三个文件描述符,分别是:
- 0(stdin):标准输入,通常对应键盘的输入,也可以是其他输入设备或重定向自文件。
- 1(stdout):标准输出,通常对应屏幕的输出,但也可以重定向到文件或其他设备。
- 2(stderr):标准错误,用于输出错误信息,通常也对应屏幕的输出,但同样可以重定向。
有时候遇到的 /dev/null
什么意思?
/dev/null
是一个特殊的设备文件,在Unix和类Unix系统(如Linux)中,它被称为“空设备”或“空文件”。当向 /dev/null
写入数据时,数据会被丢弃,就像进入了一个黑洞。而从 /dev/null
读取数据则立即返回EOF
(文件结束标记),因为它不包含任何数据。
举个例子:
tar -xvf ${SPARK_TAR} > /dev/null
> /dev/null
部分仅将标准输出(stdout
)重定向到 /dev/null
。这意味着所有写入标准输出的信息(在这个 tar 命令中,主要是被提取的文件名,因为使用了 v 选项)都会被丢弃,不会显示在终端上。
然而,这个重定向并不影响标准错误输出(stderr
)。如果 tar
命令在执行过程中遇到错误,并且向 stderr
写入错误信息,那么这些错误信息仍然会显示在终端上。
如果你想同时抑制 stdout
和 stderr
的输出,你可以使用以下命令:
tar -xvf ${SPARK_TAR} > /dev/null 2>&1
这里,2>&1
表示将标准错误输出(文件描述符 2)重定向到标准输出(文件描述符 1)所指向的位置,也就是 /dev/null
。这样,无论是 stdout 还是 stderr,所有的输出都会被丢弃。