Shell-输入输出重定向

Posted by 周思进 on January 26, 2020

输入输出重定向在执行一些Shell命令的时候经常会涉及到,下面针对几种常见的输入输出重定向操作进行简单介绍。

首先要了解一个进程会默认打开标准输入、标准输出、错误输出三个文件描述符,其对应的文件描述符数字分别是0,1,2。对于Shell进程也一样,标准输入一般是键盘,标准输出和错误输出一般是屏幕终端。

输入输出重定向就是将原本往默认文件描述符读写内容改成指定其他文件描述符对应的文件来进行读写内容。下面示例的输入输出重定向操作符,如果不指定文件描述符数字,则对于输入重定向,默认就是数字0,对于输出重定向,默认就是数字1。

一、输入重定向

默认输入都是通过键盘输入,如果需要处理大量数据,通过键盘输入是很麻烦的,如果要处理的数据本身已存储在文件中,则可以将输入重定向为对应文件。

输入重定向表达式: [n]<file

例如经常会碰到需要统计一长串字符串的字节数,可以将字符串内容拷贝到文本,然后通过wc命令统计,如下:
wc -c <./str_file

二、输出重定向

输出重定向则基本是想要将一些命令处理的结果进行保存到文件,是比较常用的一个操作。

输出重定向表达式: [n]>file
如果指定的文件不存在,会创建对应文件;如果指定的文件已经存在,则会截断原有文件内容,进行覆盖写。

例如“ls >list.txt”,将本目录的文件列表输出保存到文件list.txt。

三、追加输出重定向

上面的输出重定向如果文件已经存在,则是覆盖写,如果是想追加写,则可以通过如下表达式实现:
[n]»file

四、标准错误重定向

表达式:”2>file”

比如执行”Ls 2>err.txt”,则终端没有任何输出信息,通过查看err.txt文档,显示没有Ls命令的错误信息保存到该文件当中。

五、标准输出和标准错误重定向

表达式:”&>file”或者 “>file 2>&1”

六、读取直到指定结束

表达式:”«word”

例如需要在终端输入内容,然后将输入内容保存到文件,当输入指定内容时作为结束信号停止输入操作。

比如:cat >./file «EOF
则终端输入的内容会保存到当前目录下的file文件,当最后单独输入EOF字符,则结束输入,在这之前输入的内容则保存到file文件当中。

更多内容可以直接通过man bash命令查看对应重定向章节。