在将命令输出转到文件或者另外一个命令的时候,你可能会注意到错误提示打印在屏幕上。
在 Bash 和其他 Linux shells 中,当程序执行时,它使用三个标准的 I/O 流。每一个流由一个数字文件描述符表示:
0 - stdin,标准输入1 - stdout,标准输出2 - stderr,标准错误一个文件描述符就是一个数字,代表一个打开的文件。
输入流提供信息给程序,通常是由键盘输入的信息。
程序输出通常到标准输出流,而错误消息通常到标准错误流。默认情况下,输入流和错误流都打印在屏幕上。
二、输出转向转向就是将程序输出,发送到另外一个程序或者文件。
流可以使用n>操作符进行转向,其中n就是文件描述符数字。
当n没有写时,默认是1,标准输出流。例如,下面两个命令是一样的,都将命令输出转向到文件。
command > file command 1> file将标准错误转向,使用2>操作符:
command 2> file你也可以将标准错误stderr和标准输出stdout转向到不同的文件:
command 2> error.txt 1> output.txt想要隐藏错误信息而不是展示到屏幕上,将stderr转向到/dev/null:
command 2> /dev/null三、将标准错误stderr转向stdout当保存程序输出到文件时,通常将标准错误stderr转向stdout,以便在同一个文件中记录完成信息。
想要将标准错误stderr转向标准输出stdout,并且将错误信息也像标准输出一样发送到同一个文件,使用下面的命令:
command > file 2>&1> file 将标准输出stdout转向到文件file,而2>&1将标准错误stderr转向到当前的标准输出stdout。
转向顺序非常重要。例如,下面的例子,仅仅将标准输出stdout转向到文件file。这是因为标准错误stderr被转向到stdout发生在标准错误stdout被转向到file之前。
command 2>&1 > file另一种将标准错误stderr转向标准输出stdout 是使用&>。在 Bash 中 &>和2>&1 一个意思:
command &> file四、总结在使用命令行的时候,理解转向和文件描述符的概念是非常重要的。
想要将标准错误stderr转向标准输出stdout,使用2>&1和&>。
---来自腾讯云社区的---雪梦科技