【发布时间】:2021-08-11 13:48:16
【问题描述】:
我正在使用一个监视命令,该命令将多个命令串在一起,除了其中一个命令之外,它们都可以工作。即使单独运行它也没有所需的输出。
这是正在运行的 watch 命令。watch -n 5 echo "$(echo "$(uptime | awk '{print$11}' | sed 's/,//g')/$(nproc)*100" | bc -l | cut -c-5)% overall CPU utilization"
输出显示执行时的 cpu 利用率,但没有更新。Every 5.0s: echo 4.750% overall CPU utilization
我几乎可以肯定这是一个引用问题,但我一直在阅读并尝试不同的东西,但无法让它发挥作用。
以下是我尝试过的一些不同版本的命令:
在内部命令 sub 上使用单引号
watch -n 5 echo "$(echo '$(uptime | awk '{print$11}' | sed 's/,//g')/$(nproc)*100' | bc -l | cut -c-5)% overall CPU utilization"Every 5.0s: echo % overall CPU utilization % overall CPU utilization
转义内部命令 sub 上的单引号
watch -n 5 echo "$(echo \'$(uptime | awk '{print$11}' | sed 's/,//g')/$(nproc)*100\' | bc -l | cut -c-5)% overall CPU utilization"Every 5.0s: echo % overall CPU utilization % overall CPU utilization
在两组命令子上使用单引号,并转义内部集
watch -n 5 echo '$(echo \'$(uptime | awk '{print$11}' | sed 's/,//g')/$(nproc)*100\' | bc -l | cut -c-5)% overall CPU utilization'-bash: syntax error near unexpected token )'`
在两组命令 sub 上使用单引号(到目前为止最接近所需的输出)
watch -n 5 echo '$(echo '$(uptime | awk '{print$11}' | sed 's/,//g')/$(nproc)*100' | bc -l | cut -c-5)% overall CPU utilization'Every 5.0s: echo $(echo 0.24/8*100 | bc -l | cut -c-5)% overall CPU utilization 3.000% overall CPU utilization
如果我能确定如何让它每次都重新运行$(uptime | awk '{print$11}' | sed 's/,//g'),那么它应该可以工作。
【问题讨论】:
-
那些嵌套的
echos怎么不简单useless?