对人而言,需要吃喝拉撒,对命令而言,也是如此。以echo shelltalk为例。首先,我们敲击键盘,拼出“shelltalk”,然后回车一下,echo命令从键盘读到数据,这就是输入,它来源于键盘发出的信号;接着,echo命令开始执行;最后,echo命令在屏幕上打印出“shelltalk”,这就是输出,命令的输出场所就是屏幕。
[root@localhost ~]# echo shelltalk
[root@localhost ~]# shelltalk
在人类社会,吃喝要用碗筷,拉撒要上厕所,这是一种约定成俗的规定。在命令世界里,也有这样的规定,这就是:标准输入、标准输出、标准错误。正因为有如此规定,所以我们感觉很自然,不需要做什么设置,就能很顺畅的实现输入和输出。
不按规定做事,在世俗社会,这就叫奇葩,在命令世界里,这叫重定向。重定向,全称是:重新指定I/O设备的方向。从名字上就可以获知,重定向包括两层含义。第一层含义:指定设备;第二层含义:指定方向。
在Linux世界,一切皆是文件,常常用文件符来表示识别设备。所以,重定向的标识符为:文件符+箭头方向,两者之间不能加空格,如下所示:
command 0<file1 1>file2 2>file3
将 file1 作为 command 的输入,将 command 的处理结果输出到 file2,将 command 的错误信息输出到 file3。
按照世俗规则办事,我们不需要多做一点工作,因为系统已经为我们都设置好了,如下所示:
| 类型 | 设备文件 | 文件符 | 默认设备 |
| 标准输入 | /dev/stdin | 0 | 键盘 |
| 标准输出 | /dev/stdout | 1 | 显示器 |
| 标准错误 | /dev/stderr | 2 | 显示器 |
不与凡花争奇艳,要想不落俗套,做与众不同之路,在内心里面更要牢记各种符号规则,如下所示:
| 类型 | 操作符 | 用途 |
| 重定向输入 | 0< | 输入源来自指定的文件 |
| 重定向输出 | 1> | 输出到指定的文件(覆盖) |
| 重定向输出 | 1>> | 与> 类似,它是追加 |
| 重定向错误 | 2> | 输出错误信息到指定的文件 |
| 重定向错误 | 2>> | 与上面类似,它是追加 |
| 混合重定向 | &> | 所有的输出,相当于>和2> |
混合重定向:&>,输出就两种:标准输出和错误输出,&表示1和2。还有一种写法:cmd 2>&1 file。不过,后者不如前者好记忆。
评论专区
评论加载中...登录后即可发表评论