linux中的ls 为什么不支持管线(pipe line)?
大家讲道理
大家讲道理 2017-04-17 13:23:24
[Linux讨论组]
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
黄舟

本想简短写在Honwhy的评论区的,结果越写越长了。。。


你把两个不同的东西混为一谈了。管道沟通的是 标准输入输出(stdin/stdout),ls命令接受的路径是 命令行参数

看你举的例子cat file | ls,目的是用ls列出file文件中的每一行路径的内容。

ls是以类似ls /path/to/file这种方式调用的,你需要的不是管道,而是ls $(cat file)

你混乱的原因可能是因为,相当多命令是同时可以接受两者的,比如cat(但行为不一样了)。但没有人规定一定要同时支持两者。

加多个例子,刚才写的时候没想起来:

vim编辑文件时用的命令是vim file,但如果要从stdin读入编辑内容的话就需要使用echo "gagagagaggaga" | vim -

在vim后面加上一个参数-来告诉vim调整行为,改为从stdin读入内容。


小尾巴:

如果你的提问对你造成了很多困扰,但却被很多人认为没有价值、懒得回答、甚至点反对。你的学习很可能正处于“溺水”状态。没有准备好基本救生装备(相应专业的基础知识框架),就进入到深水区,被大量需要基础知识支撑的相对高级内容淹没,茫无头绪。

尤其在自学成风的计算机领域这种情况非常常见,我自己之前也在这上面浪费很多时间。这个时候建议应该去找到至少一本自己领域内的经典书籍,拒绝速成的诱惑,将知识体系从基础扎实的梳理一遍。这是我体验过最快的学习方法。

伊谢尔伦

PIPE是将第一个进程的STDOUT连接到第二个进程的STDIN, 但是ls命令不读取STDIN,而是用参数的形式执行的。

正确的写法是:

shcat file | xargs ls -l

或者

shls -l `cat file`

将STDIN或STDOUT作为参数给ls命令。这里的cat file只是我随便举的一个例子,可以是随便什么有STDOUT输出的命令。

伊谢尔伦

ls命令是支持的pipe的。
有标准输出的命令在命令行中就可以使用pipe

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号