LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 978|回复: 6

管道的问题

[复制链接]
发表于 2007-8-14 23:35:42 | 显示全部楼层 |阅读模式
ls | grep abc

这个命令是不是等于先将 ls 的标准输出 到一个文件,然后 从这个文件 grep?
ls > file ; grep < file abc


是这样的吗?
发表于 2007-8-15 08:49:32 | 显示全部楼层
是的

管道就是:连接着一个命令的标准输出和另一个命令的标准输入
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-15 10:27:35 | 显示全部楼层
如果管道把前一个命令的标准输出(1,2),是先执行命令1,执行完毕了把结果方在一个文件里,然后由命令2处理吗?

还是2个命令同步进行的呢.
回复 支持 反对

使用道具 举报

发表于 2007-8-15 13:12:13 | 显示全部楼层
ls > file ; grep abc < file
回复 支持 反对

使用道具 举报

发表于 2007-8-15 14:55:54 | 显示全部楼层
如果管道把前一个命令的标准输出(1,2),是先执行命令1,执行完毕了把结果方在一个文件里,然后由命令2处理吗?

不是,不存在临时文件,你可以想象为水流,自来水龙头出来的水通过管道输入到过滤器,再由过滤器出来过滤后的水。

自来水龙头就是ls,水管就是|,过滤器就是grep,龙头出来的水是标准输出,过滤器通过水管接收自来水相当于grep通过将ls的标准输出作为自己的标准输入。过滤器出来过滤后的水就是grep处理后的标准输出。

这只是大致的比喻,两个进程是同时开始的,如果前一个进程的输出能力超过了后一个进程的输入能力,那就要牵涉到缓冲,排队的概念了,这个shell帮你安排了,你自己感觉不到。

用临时文件(无论是实在的,还是内存中虚拟的)那是单任务系统的做法。
回复 支持 反对

使用道具 举报

发表于 2007-8-15 16:28:02 | 显示全部楼层
流水概念深入人心阿
回复 支持 反对

使用道具 举报

发表于 2007-8-15 20:05:21 | 显示全部楼层
"管道"这个名字本身也说明问题了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表