배터리를 무인으로 실행할 때 컴퓨터를 절전 모드로 전환하는 간단한 스크립트를 만들려고 합니다. 다음과 같은 간단한 스크립트가 있습니다.
#!/bin/sh
if [ `cat /sys/class/power_supply/ADP1/online` -eq 0 ]; then
cat /sys/class/power_supply/ADP1/online; # actual sleep command goes here
fi
를 사용하여 실행하면 xautolock -time 1 -noclose -locker /path/to/script.sh
예상대로 작동하여 AC 전원이 제거되면 매분 0을 인쇄하고 마우스를 움직이거나 전원 어댑터를 연결할 때 가만히 유지됩니다. 여태까지는 그런대로 잘됐다.
그러나 알 수 없는 이유로 라인으로 작동하도록 할 수 없습니다.
xautolock -time 1 -noclose -locker "if [ `cat /sys/class/power_supply/ADP1/online` -eq 0 ]; then cat /sys/class/power_supply/ADP1/online; fi"
다음은 샘플 출력입니다.
0 # I start with the charger disconnected
0
0 # Here I connect the charger
1
1
^C
보시다시피, /sys/class/power_supply/ADP1/online
예상대로 값이 변화하지만 상태는 초기 값에 머무르는 것 같습니다. 마찬가지로, AC 전원이 연결된 상태에서 스크립트를 시작하면 나중에 터미널에 아무 것도 인쇄되지 않습니다.
명령 대체는 처음에만 평가되고 그 이후에는 출력이 재사용되는 것 같습니다. 왜 이런 일이 발생하는지에 대한 합리적인 설명이 있습니까?
추신. 대체 대체 구문을 시도했지만 $()
동일한 결과를 얻었습니다.
답변1
예, 명령 대체는 명령이 xautolock
큰따옴표 안에 있으므로 명령이 구문 분석된 후 즉시 평가됩니다.
if 문을 작은따옴표로 묶어야 합니다.
개인적으로 저는 locker 명령을 별도의 스크립트에 넣겠습니다.