管道的意义
• 正常来讲,我们在 shell 里的操作,输入来自键盘,正常输出到屏幕,错误输出也是到屏幕,这里键盘就是标准输入,屏幕就是标准输出和错误输出;
• 管道做什么呢?顾名思义,管道的用途是转向,管道就是把标准的输入输出做了转向,有了管道,我们可以不从键盘获取输入,也可以不把输出发送到屏幕,管道可以用于方便命令之间的衔接与数据传递;
• 重定向应用通常就以下两点:
• 重新设置命令的默认输入 / 输出,指向到自己指定的文件;
• 扩展自己定义的新的描述符,对文件进行读写操作。
下面我们来逐个看看管道符。
> :表示将输出转向到 > 后面:
• 例如将一个命令的输出结果重定向到一个文件,并将文件原有内容覆盖,那么就用这个指令:foo_command > bar_file
• 由此,我们可以拓展出一个特别的用途,如果我们把空结果重定向到一个文件,是不是就相当于把文件清空了?:> newfile.txt
<: 从 < 输入而不是标准输入:
• 表示一个命令将把从 < 后获取的数据作为命令的输入数据,而不再从键盘获取输入
• 例如我们在执行 mysql 导入文件时,常用这个方法:mysql -h host -u username -p dbname < sql_file.sql
>>:转向追加输出:
• 类似于 >,但是不会覆盖文件的原有内容,而是追加在文件尾的效果;
|:管道,将前面程序的输出转向作为后面程序的输入,用于多个指令间的数据流衔接:
• 例如:ls | sort
管道的基础介绍先到这里,下一次我们讲一点高级管道的自定义指令。