Bash 观察和观察不会产生任何结果

Bash 观察和观察不会产生任何结果,bash,zsh,watch,wc,Bash,Zsh,Watch,Wc,我尝试使用watch不断显示当前文件夹的大小,但是下面的命令不起作用,我做错了什么?我使用zshshell $watch ls-a|wc-l 我做错了什么 Shell将|解析为管道。因此,当shell看到: watch ls -a | wc -l 它将其解析为两个命令,其中一个命令输出重定向到另一个命令: ( watch ls -a ) | ( wc -l ) 它使用两个参数ls和-a运行命令watch,使用一个参数-l运行命令wc。因为watch ls-a永不结

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

我做错了什么

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'
这将使用一个参数运行单个命令
watch
watch
在内部生成一个shell,并将字符串
ls-a | wc-l
传递给它。然后,这个内部shell生成了两个新进程
ls-a
wc-l
,并连接了输入/输出

我做错了什么

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'

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

我想你真正想要的是
观看'ls-a | wc-l'
(注意引号)。感谢你的回复,这是可行的,但是对于其他选项,例如,当我尝试观看du-sh时,我不需要引号,你知道这是为什么吗?感谢您,在不加引号的情况下,
watch
将查看
ls-a
的结果,而产生的任何结果都将由shell转发到
wc-l
。使用引号,
watch
将查看
ls-a | wc-l
的结果。我想你真正想要的是
watch'ls-a | wc-l'
(注意引号)。感谢你的回复,这很有效,但是对于其他选项,例如当我尝试
watch du-sh
时,我不需要引号,你知道这是为什么吗?感谢您,在不加引号的情况下,
watch
将查看
ls-a
的结果,而产生的任何结果都将由shell转发到
wc-l
。使用引号,
watch
将查看
ls-a|wc-l