一 管道与重定向区别:
(1)管道:
格式:program1 | program2:将program1的标准输出修改为program2的标准输入。
"|"的两边都是命令或程序。
管道可以使得执行速度比使用临时文件到程序快上十倍。
(2)重定向:
格式:
*program < file:将program的标准输入改为file。
*program > file:将program的标准输出改为file。
*program >> file:可将program的标准输出附加到file的结尾处。
重定向:左边是命令或程序,右边是文件。
二 重定向:其他重定向操作符。
(一)提供行内输入(inline input)的<<与<<-:
(1)格式:
1.会执行内容里的命令。
*program <<EOF
内容
EOF
2.不执行内容命令。会把命令当成标准输入传给程序。
*program << delimiter(定界符)
内容
delimiter
*shell看到<<的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。
3.<<-:所有开头的tab在传递给程序作为输入之前,都从嵌入文件与结束定界符中删除。
(2)特点:
*可以在shell脚本内部正文提供输入数据,这样的数据叫做嵌入文件(here document)。
(二)<>:打开一个文件作为输入输出之用。
三 重定向与文件描述符:
(一)文件描述符0、1、2,分别对应于标准输入、标准输出以及标准错误输出。
(1)格式:例如:命令 1>output 2>error。
*将命令的标准输出重定向到output文件,标准出错重定向到error文件。
*1>output的1可以省去,因为输出重定向的默认文件描述符为标准输出。
(2)格式:命令 >output 2>&1。
*将命令的标准输出和出错都重定向到output文件。
*解释:>output让文件描述符作为文件output。2>&1:2>重定向标准错误输出到&1;&1无论文件描述符1在哪里,在本例中文件描述符1为output。
*这4个字符2>&1必须连在一起,中间不能有任何空格。
(3)格式:命令 2>&1。
*将标准出错输出重定位到标准输出。
*例如:命令 2>&1 | head. 如果没有2>&1,head的输出信息没有出错信息。
(4)格式:命令 &> file.
*将命令的标准输出和出错都重定向到file文件。