【问题标题】:Watch and wc not yielding any results手表和厕所没有产生任何结果
【发布时间】:2026-02-23 21:45:02
【问题描述】:

我尝试使用 watch 不断显示当前文件夹的大小,但是下面的命令不起作用,我做错了什么?我用zsh shell
$ watch ls -a | wc -l

【问题讨论】:

  • 我猜你真正想要的是watch 'ls -a | wc -l'(注意引号)。
  • 感谢您的回复,这可行,但是对于其他选项,例如当我尝试watch du -sh <directory> 时,我不需要引号,您知道这是为什么吗?谢谢
  • 不带引号,watch 将观察ls -a 的结果,并且任何产生的结果都将由shell 转发到wc -l。使用引号,watch 将观察ls -a | wc -l 的结果

标签: bash zsh watch wc


【解决方案1】:

我做错了什么?

Shell 将| 解析为管道。所以当shell看到时:

watch ls -a | wc -l

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

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

它运行带有两个参数 ls-a 的命令 watch 以及带有单个参数 -l 的命令 wc。因为watch ls -a 永远不会结束,而wc -l 只在输入结束时输出,所以您看不到任何打印出来的东西。 wc -l 等到所有输入行都被打印出来,这永远不会发生。

因为watch在内部调用了shell,所以你可以:

watch 'ls -a | wc -l'

这会运行一个带有一个参数ls -a | wc -l 的命令watchwatch 在内部生成一个 shell 并将字符串 ls -a | wc -l 传递给它。然后这个内部 shell 生成两个新进程 ls -awc -l 并连接输入/输出。

【讨论】:

    最近更新 更多