在Unix系统中,任何命令,包括Shell本身,默认情况下总是读取来自终端键盘输入的数据,这个数据输入源通常称作标准输入(stdin),其文件描述符为0.
默认情况下,命令的处理结果总是输出到用户终端的屏幕上,这个输出目的通常称作标准输出(stdout),其文件描述符为1.
另外,在命令的执行期间,如果出现问题,相应的错误信息默认情况下也将输出到用户的终端屏幕上,这个输出目的通常称作标准错误输出(stderr),其文件描述符为2.
有上面的基础知识后,我们现在来讨论Linux/Unix系统命令行的精妙之处:输入输出重定向.
例如:
ls -l > fname
上述命令就是把ls命令的返回结果输出到fname这个文件中去,但是要注意的事情是输出前将清空原文件内容(如果原文件存在).使用ls -l >>fname这个命令是将结果附加到原文件后面.
grep root < fname
上述命令是在fname这个文件中寻找带有root这个字段的内容,是把标准输入重定向为文件输入.
上述命令其实是简化后的形式,其原始形式为
0 < fname 把标准输入重定向到指定文件中
1 > fname 把标准输出重定向到文件中
2 > fname 把标准错误输出重定向到文件中
还有一个重要的用法
i>& j 把文件描述符i表述的输出文件重定向到文件描述符j表示的文件
例如:
command_1 2 >& 1 把这个错误命令的标准错误输出重定向到标准输出
其原理是用指针实现的.
默认情况下,命令的处理结果总是输出到用户终端的屏幕上,这个输出目的通常称作标准输出(stdout),其文件描述符为1.
另外,在命令的执行期间,如果出现问题,相应的错误信息默认情况下也将输出到用户的终端屏幕上,这个输出目的通常称作标准错误输出(stderr),其文件描述符为2.
有上面的基础知识后,我们现在来讨论Linux/Unix系统命令行的精妙之处:输入输出重定向.
例如:
ls -l > fname
上述命令就是把ls命令的返回结果输出到fname这个文件中去,但是要注意的事情是输出前将清空原文件内容(如果原文件存在).使用ls -l >>fname这个命令是将结果附加到原文件后面.
grep root < fname
上述命令是在fname这个文件中寻找带有root这个字段的内容,是把标准输入重定向为文件输入.
上述命令其实是简化后的形式,其原始形式为
0 < fname 把标准输入重定向到指定文件中
1 > fname 把标准输出重定向到文件中
2 > fname 把标准错误输出重定向到文件中
还有一个重要的用法
i>& j 把文件描述符i表述的输出文件重定向到文件描述符j表示的文件
例如:
command_1 2 >& 1 把这个错误命令的标准错误输出重定向到标准输出
其原理是用指针实现的.