如何正确引用“watch”的管道命令?

Reg*_*ser 5 command-line watch-command

我想在创建文件时关注它。所以我用了这个命令

ls -hal ./file |awk '{print $5}'
Run Code Online (Sandbox Code Playgroud)

这给出了我正在寻找的文件的大小。我使用awk是因为我不需要其他东西,只需要文件大小。

但是我无法在watch命令中使用它,因为如果我尝试

watch ls -hal ./file |awk '{print $5}'
Run Code Online (Sandbox Code Playgroud)

然后 watch 只接受ls -hal ./file然后通过管道将其传送到awk,不提供任何输出。

如果我尝试

watch "ls -hal ./file |awk '{print $5}'"
Run Code Online (Sandbox Code Playgroud)

然后它会变得很奇怪,显示错误的命令和整个输出。

Every 2.0s: ls -hal ./file |awk '{print }'              Sun Jul 20 15:52:18 2014

-rw-rw---- 1 aditya aditya 1.7K Jul 20 15:52 ./file
Run Code Online (Sandbox Code Playgroud)

您可以看到$5awk 命令中没有。

进一步引用会产生各种类似的错误。

那么引用这个命令的正确方法是什么?

ste*_*ver 7

一种选择是,以逃避$你的awk表达

watch "ls -hal ./file |awk '{print \$5}'"
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过使用stat而不是解析输出来完全避免该问题ls

watch stat -c '%s' ./file
Run Code Online (Sandbox Code Playgroud)