为什么 du 或 echo 流水线不起作用?
我正在尝试对当前目录中的每个目录使用 du 命令。所以我尝试使用这样的代码:
ls | du -sb
但它没有按预期工作。它仅输出当前“.”的大小目录仅此而已。 echo 输出空行也是如此
ls | echo
。为什么会发生这种情况?
I'm trying to use du command for every directory in the current one. So I'm trying to use code like this:
ls | du -sb
But its not working as expected. It outputs only size of current '.' directory and thats all.
The same thing is with echo
ls | echo
Outputs empty line. Why is this happening?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用管道将第一个命令的输出 (stdout) 发送到子进程(第二个命令)的 stdin(输入)。您提到的命令不会在
stdin
上接受任何输入。 ,这可以与cat
一起使用(通过工作,我的意思是像cat
一样不带参数运行,只需传递您提供的输入):例如 您的应用程序,这就是 xargs 的用武之地。它接受管道输入并将其作为指定命令的参数。因此,您可以使其工作方式如下:
请注意,默认情况下
xargs
将中断其在空格上的输入,因此,如果您的文件名包含空格,则这将无法按您想要的方式工作。因此,在这种特殊情况下,这样会更好:Using a pipe sends the output (stdout) of the first command, to stdin (input) of the child process (2nd command). The commands you mentioned don't take any input on
stdin
. This would work, for example, withcat
(and by work, I mean work likecat
run with no arguments, and just pass along the input you give it):For your applications, this is where
xargs
comes in. It takes piped input and gives it as arguments to the command specified. So, you can make it work like:Beware that by default
xargs
will break its input on spaces, so if your filenames contain spaces this won't work as you want. So, in this particular case, this would be better:使用命令替换,如下所示:
Use command substitution, like this:
或者
or