玩转linux文件描述符和重定向,文件描述符、重定向、/dev/null

文件描述符是与文件输入、输出关联的整数。它们用来跟踪已打开的文件。最常见的文件描述符是stidin、stdout、和stderr。我们可以将某个文件描述符的内容重定向到另外一个文件描述符中。

文件描述符我们常见的就是系统预留的0,1和2这三个。他们的意义:

0 —— stdin(标准输入)

1 —— stdout (标准输出)

2 —— stderr (标准错误)

重定向操作,其实就是通过在shell命令后面追加一个重定向操作符号,将shell命令对应的文件描述符输出的文本信息重新输入到另外一个指定文件的操作。

重定向操作符号有两个>和>>。

对于标准输出的重定向操作,>等同于1>。

描述符的重定向还有下面的几种用法

你可以将stderr单独定向到一个文件,将stdout重定向到另一个文件:cmd 2>stderr.txt 1>stdout.txt

也可以利用下面的方法,将stderr转换成stdout,使得stderr和stdout都被重新定向到同一个文件中:cmd > output.txt 2>&1

cmd &> output.txt

cmd >& output.txt # 和上个表达式效果一样

/dev/null是一个特殊的设备文件,这个文件接收到的任何数据都会被丢弃。因此,null这个设备通常也被成为位桶(bit bucket)或黑洞。

简单地理解就是,重定向操作给这个/dev/null文件的所有东西都会被丢弃。

文件描述符输出的字符串,总是会显示出来的。如果我们在shell编程的时候,操作到某一条命令的返回结果,我们不想要这个时候又不想让这个输出结果打印到屏幕上,我们就可以重定向到/dev/null这个文件来,由/dev/null这个文件负责处理后事。i=$(ls 123.txt) # i 获得命令 ls 123.txt 输出的标准输出。错误提示(标准错误)依然会打印到屏幕上显示

i=$(ls 123.txt 2> /dev/null) # ls命令如果出现了错误提示,就会被重定向到/dev/null去了

你可能感兴趣的:(玩转linux文件描述符和重定向,文件描述符、重定向、/dev/null)