“watch” 和 “df”

“watch” 和 “df”

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

/dev/sdc1       954G  889G   65G  94% /media/bohdan/teamdata

当我运行的时候sh -c "df -h | grep sdc"一切都很好,结果是一样的......

当我跑步时watch sh -c "df -h | grep sdc"......突然我不再能够看到人类可读的数字:

/dev/sdc1      1000203520  934440320  65763200  94% /media/bohdan/teamdata

为什么?

答案1

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

sh -c df -h | grep sdc

这样就sh -c可以执行普通的df,并将-h其作为位置参数传递给shell。

您可以添加额外的引用:

watch "sh -c 'df -h | grep sdc'"

或者告诉 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.

或者直接运行

watch "df -h | grep sdc"

没有(不必要的)明确的sh -c

答案2

您需要引用该命令

watch 'sh -c "df -h | grep sdc"'

watch通过调用 来运行给出的命令sh -c。因此,您实际上正在做的是运行类似 的命令sh -c sh -c "df -h | grep sdc"

所以我想说,sh -c你的watch参数是多余的。

相关内容