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

관련 정보