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
可能性が非常に高いするすべての間隔が実行されますが、算術式がコマンドに渡される前に対話型シェルで評価されるため、毎回同じ値を上書きします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
デフォルトでは、式をシェルに渡します。