watch -n1 $() は、時間間隔ごとに $() を実行しません。

watch -n1 $() は、時間間隔ごとに $() を実行しません。

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デフォルトでは、式をシェルに渡します。

関連情報