我尝试使用watch不断显示当前文件夹的大小,但是以下命令不起作用,我该怎么办?我用zsh
外壳$ watch ls -a | wc -l
我该怎么办?
Shell将|
解析为管道。因此,当shell看到:
watch ls -a | wc -l
它解析为两个命令,其中一个命令输出重定向到另一个:
( watch ls -a ) | ( wc -l )
它运行带有两个参数watch
和ls
的命令-a
和带有单个参数wc
的命令-l
。因为watch ls -a
从不结束,并且wc -l
仅在输入结束时输出,所以您看不到任何打印内容。 wc -l
等待直到所有输入行都打印完,再也没有发生。
由于watch
内部调用了外壳程序,因此您可以:
watch 'ls -a | wc -l'
这将运行带有单个参数watch
的单个命令ls -a | wc -l
。 watch
在内部产生一个shell,并将字符串ls -a | wc -l
传递给它。然后,此内部外壳会生成两个新的进程ls -a
和wc -l
,它们已连接了输入/输出。