변수가 해당 값보다 작을 때 주어진 명령을 실행할 것으로 예상하여 이 스크립트를 작성했습니다. 그러나 (로그에 따르면) 스크립트가 처음 실행될 때 발생하는 일은 "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 ]
각 루프에서 파일을 다시 읽습니다.