안녕하세요. 실행할 bash 스크립트가 있습니다.watch ./script.sh
노트북의 냉각 문제를 디버깅하기 위한 것이었지만, 제가 작성한 스크립트가 예상대로 작동하지 않았습니다. 저는 bash 스크립팅을 처음 접했기 때문에 간단하다고 확신합니다.
내 스크립트에 중첩된 명령 대체가 있는 줄이 있지만 내부 명령이 작동하지 않는 것 같거나 적어도 내부 명령이 값을 모르는 것처럼 보입니다 $i
. 도움을 주시면 감사하겠습니다.
스크립트는 다음과 같습니다.
echo "THERMAL ZONE 2:"
echo "Cur Temp: $(cat /sys/class/thermal/thermal_zone2/temp)"
for i in {2..7}
do
echo "cooling_device$i STATE: $(cat /sys/class/thermal/thermal_zone2/cdev$i/cur_state) TRIP POINT TEMP: $(cat /sys/class/thermal/thermal_zone2/trip_point_$(cat /sys/class/thermal/thermal_zone2/cdev$i_trip_point)_temp)"
done
출력은 다음과 같습니다.
THERMAL ZONE 2:
Cur Temp: 43000
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device2 STATE: 1 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device3 STATE: 1 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device4 STATE: 0 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device5 STATE: 0 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device6 STATE: 0 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device7 STATE: 0 TRIP POINT TEMP:
답변1
내가 본 가장 명백한 실수는 i
루프 변수를 보호하지 않는다는 것입니다. 따라서 을 작성할 때 쉘은 설정되지 않은 $i_trip_point
변수를 찾고 있으므로 두 번째 유형의 오류가 발생합니다. 예를 들면 다음과 같습니다.i_trip_point
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
point
사이에 있는 두 개의 밑줄은 temp
삽입되는 빈 변수를 표시합니다. 구문을 사용해야 합니다 ${i}_trip_point
. 중괄호는 변수 이름의 일부로 해석되는 인접한 문자로부터 변수를 보호합니다.