1.数据流重定向的含义:
我们知道,在shell上,一个command的执行,可能会有输入数据,输出正确数据以及输出错误数据,相应地,数据写入的设备就有输入数据设备,输出正确数据的设备以及输出错误数据的设备。标准输入设备stdin,即键盘、标准正确输出stdout,即屏幕终端,标准错误输出stdout,即屏幕终端。而数据流重定向就是要将某个command这些stdin、stdout以及stderr,设定为指定的地方,例如指定的文件或者/dev/null等等
2.数据流重定向的方式:
a)将stdin重定向:代码为0,使用<(也可以使用0<)
b)将stdout重定向:代码为1,使用>或>>(也可以使用1>或1>>)
c)将stderr重定向:代码为2,使用2>或2>>
Remarks:
a)ls -l /home > ./newfile与ls -l /home 1> ./newfile是等价的
b)1>与1>>的区别在于,1>表示是以覆盖的方式将正确数据的输出到指定的文件或者设备上;而1>>表示是以累加的方式将正确的数据输出到指定的文件或者设备上。2>与2>>的区别是类似的
c)关于数据流重定向的几个特殊的应用场景:
场景1:将find的查询结果正确的输出信息存入filename_1中,将错误的输出信息存入filename_2中 find /home -name .bashrc 1> filename_1 2> filename_2 场景2:将find的查询结果的正确或者错误的输出信息存入到同一个文件filename中,下面两种方式都可以实现 find /home -name .bashrc 1> filename 2>&1 #2>&1之间无空格 find /home -naem .bashrc &> filename
d)/dev/null是垃圾桶黑洞设备,这个东西可以吃掉任何导向这个设备的信息
e)值得注意的是,<< 不是输入重定向的意思,它是“结束输入”的意思。例如我们输入cat > filename << EOF之后,cat命令开始接收键盘的输入,当我们用键盘输入一些字符后,当输入EOF后,cat命令就终止接收键盘的输入了。这里面的EOF也可以是其他的字符,但大家习惯用EOF。也就是说<<可以定义一个终止输入的标记。