Watch and wc没有产生任何结果

问题描述 投票:0回答:1

我尝试使用watch不断显示当前文件夹的大小,但是以下命令不起作用,我该怎么办?我用zsh外壳$ watch ls -a | wc -l

bash zsh watch wc
1个回答
2
投票

我该怎么办?

Shell将|解析为管道。因此,当shell看到:

watch ls -a | wc -l

它解析为两个命令,其中一个命令输出重定向到另一个:

( watch ls -a )      |          ( wc -l )

它运行带有两个参数watchls的命令-a和带有单个参数wc的命令-l。因为watch ls -a从不结束,并且wc -l仅在输入结束时输出,所以您看不到任何打印内容。 wc -l等待直到所有输入行都打印完,再也没有发生。

由于watch内部调用了外壳程序,因此您可以:

watch 'ls -a | wc -l'

这将运行带有单个参数watch的单个命令ls -a | wc -lwatch在内部产生一个shell,并将字符串ls -a | wc -l传递给它。然后,此内部外壳会生成两​​个新的进程ls -awc -l,它们已连接了输入/输出。

© www.soinside.com 2019 - 2024. All rights reserved.