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
기본적으로 표현식을 셸에 전달합니다.