shell中的2>devnull

mac2024-08-06  59

1、文件描述符 Linux系统预留可三个文件描述符:0、1和2,他们的意义如下所示: 0——标准输入(stdin) 1——标准输出(stdout) 2——标准错误(stderr)

标准输出——stdout 假设:在当前目录下,有且只有一个文件名称为123.txt的文件,这时我们运行这个命令【ls 123.txt】,就会获得一个标准输出stdout的输出结果:123.txt 错误输出——stderr 按照上面的假设,我们运行另一条命令【ls abc.txt】,这样我们就会获得一个标准错误stderr的输出结果“ls:无法访问abc.txt:没有那个文件或目录”。

2、重定向 重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举个例子: (a)重定向标准输出stdout

对比没有添加重定向的操作,这条命令在使用之后并没有将123.txt打印到屏幕。在紧接的cat操作后,可以发现本来应该被输出的内容被记录到stdout.txt中。 (b)重定向标准错误stderr

对比没有添加重定向的操作,这条命令在使用之后并没有将123.txt打印到屏幕。在紧接的cat操作后,可以发现本来应该被输出的内容被记录到stderr.txt中。

以上执行结果如下:

[root@node1 xiaoa]# ll total 0 -rw-r–r--. 1 root root 0 Jun 5 14:21 123.txt [root@node1 xiaoa]# ls 123.txt 123.txt [root@node1 xiaoa]# ls abd.txt ls: cannot access abd.txt: No such file or directory [root@node1 xiaoa]# ls 123.txt 1> stdout.txt [root@node1 xiaoa]# vi stdout.txt [root@node1 xiaoa]# ls abc.txt 2> stderr.txt [root@node1 xiaoa]# vi stderr.txt [root@node1 xiaoa]# ll total 8 -rw-r–r--. 1 root root 0 Jun 5 14:21 123.txt -rw-r–r--. 1 root root 53 Jun 5 14:40 stderr.txt -rw-r–r--. 1 root root 8 Jun 5 14:39 stdout.txt

(c)也可以将stderr和stdout重定向到同一个文件

#ls 123.txt &> output.txt

3、Linux特殊文件 /dev/null是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null这个设备通常也被称为位桶(bit bucket)或黑洞。 所以,2>/dev/null的意思就是将标准错误stderr删掉。

#ls abc.txt 2> /dev/null

最新回复(0)