我正在使用一个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
我几乎可以肯定,这是一个引用的问题,但我一直在阅读和尝试不同的事情,只是无法让它发挥作用。
下面是我尝试过的命令的一些不同版本:
在inside命令子程序上使用单引号
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"
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'),那么它应该能工作。
发布于 2021-08-11 14:03:20
我不确定watch部件应该做什么,但是您可以通过将所有处理重构成一个Awk脚本来极大地简化这一点。
像这样吗?
watch -n 5 'uptime | awk -v n="$(nproc)" "{cpu=\$11; gsub(/,/, \"\", cpu); printf \"%0.3f%% overall CPU utilization\\n\", cpu/n*100 }"'引用有点麻烦;您可能希望将单引号代码保存为脚本,这样您就可以切换到围绕着Awk代码的单引号,并去掉反斜杠。
发布于 2021-08-11 14:28:40
若要跳过必须引用该命令,可以使用
myfunc() {
insertYourCodeHere
}
export -f myfunc
watch -n5 bash -c myfunchttps://stackoverflow.com/questions/68743334
复制相似问题