当我运行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)
为什么?
这是因为默认情况下,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:
Run Code Online (Sandbox Code Playgroud)-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"
Run Code Online (Sandbox Code Playgroud)
没有(不必要的)显式sh -c.