while 루프의 변수는 초기 실행만 확인합니까?

while 루프의 변수는 초기 실행만 확인합니까?

변수가 해당 값보다 작을 때 주어진 명령을 실행할 것으로 예상하여 이 스크립트를 작성했습니다. 그러나 (로그에 따르면) 스크립트가 처음 실행될 때 발생하는 일은 "TEMP_NOW" 변수를 확인하고 캐시된 것처럼 해당 초기 값을 영원히 사용한다는 것입니다. TEMP_NOW 변수가 확실히 변하는 것을 확인했습니다.

관심을 가져주셔서 감사합니다

#!/bin/bash
set -x
LOG_FILE=/home/mutt/pl/logs/pump.log
TEMP_NOW=$(cat /home/mutt/pl/logs/temp_now.txt)

while [ $TEMP_NOW -le 556 ]
do
        /home/mutt/pl/temp_pump_on.s
        echo ON > /home/mutt/pl/logs/pump_sch.txt
        echo $TEMP_NOW at `$(which date)` >> $LOG_FILE 2>&1 &
        sleep 5m
        /home/mutt/pl/temp_pump_off.s
        echo $TEMP_NOW at `$(which date)` >> $LOG_FILE 2>&1 &
        echo OFF > /home/mutt/pl/logs/pump_sch.txt
        sleep 20m
set +x 
done

통나무:

mutt@mutt:~/pl/logs $ tail -10 pump.log
TEMP turned pump off at Sat Jan 13 13:07:01 CST 2018
125 at Sat Jan 13 13:07:01 CST 2018
TEMP turned pump ON at Sat Jan 13 13:27:01 CST 2018
125 at Sat Jan 13 13:27:01 CST 2018
TEMP turned pump off at Sat Jan 13 13:32:01 CST 2018
125 at Sat Jan 13 13:32:01 CST 2018 
TEMP turned pump ON at Sat Jan 13 13:52:01 CST 2018
125 at Sat Jan 13 13:52:01 CST 2018
125 at Sat Jan 13 13:57:01 CST 2018
TEMP turned pump off at Sat Jan 13 13:57:01 CST 2018
mutt@mutt:~/pl/logs $ ll temp_now.txt 
-rw-rw-rw- 1 pi pi 5 Jan 13 14:12 temp_now.txt
mutt@mutt:~/pl/logs $ cat temp_now.txt 
9625
mutt@mutt:~/pl/logs $ 

답변1

물론 변수는 정적이며 루프 내부에 할당되지 않습니다. 다음을 바꾸십시오.

while [ $TEMP_NOW -le 556 ]

그리고:

while [ "$(cat /home/mutt/pl/logs/temp_now.txt)" -le 556 ]

각 루프에서 파일을 다시 읽습니다.

관련 정보