当我运行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
参数是多余的。