watch -n1 $()
不更新$()。
解决方法是什么?
这是我的例子:
watch -n1 echo $(( $(date +%s -d "sun") - $( date +%s ) ))
这导致
Every 1.0s: echo 106602
106602
预期输出应该是:
Every 1.0s: echo $(( $(date +%s -d "sun") - $( date +%s ) ))
106602
106602
每秒都在减少
答案1
很可能做每个间隔运行 - 但每次都会覆盖相同的值,因为算术表达式在传递给命令之前由交互式 shell 计算watch
。如果您pgrep
从另一个终端运行,您可以看到这一点:
watch -n1 echo $(( $(date +%s -d "sun") - $( date +%s ) ))
然后
$ pgrep -af watch
81 watchdogd
29311 watch -n1 echo 111748
您可以通过单引号表达式来防止早期评估:
watch -n1 echo '$(( $(date +%s -d "sun") - $( date +%s ) ))'
给予
$ pgrep -af watch
81 watchdogd
29543 watch -n1 echo $(( $(date +%s -d "sun") - $( date +%s ) ))
/bin/sh
默认情况下,它将把表达式传递给shell。