“观看”和“df”

boh*_*nko 1 watch-command

当我运行df -h | grep sdc一切正常时,我看到人类可读格式的数字:

/dev/sdc1       954G  889G   65G  94% /media/bohdan/teamdata
Run Code Online (Sandbox Code Playgroud)

当我运行sh -c "df -h | grep sdc"一切正常时,结果是一样的......

当我运行watch sh -c "df -h | grep sdc"......突然我不再有资格看到人类可读的数字:

/dev/sdc1      1000203520  934440320  65763200  94% /media/bohdan/teamdata
Run Code Online (Sandbox Code Playgroud)

为什么?

ste*_*ver 5

这是因为默认情况下,watch它本身将您的命令包装在sh -c命令中。这意味着您失去了引用级别,并且您的命令变成了

sh -c df -h | grep sdc
Run Code Online (Sandbox Code Playgroud)

这样就sh -c执行 plain df,并-h作为位置参数传递给 shell。

您可以添加额外的引用:

watch "sh -c 'df -h | grep sdc'"
Run Code Online (Sandbox Code Playgroud)

或者告诉 watch 不要使用以下命令包装命令-x

   -x, --exec
          command is given to sh -c which means that you may need  to  use
          extra  quoting  to get the desired effect.  This with the --exec
          option, which passes the command to exec(2) instead.
Run Code Online (Sandbox Code Playgroud)

或者简单地运行

watch "df -h | grep sdc"
Run Code Online (Sandbox Code Playgroud)

没有(不必要的)显式sh -c.