xautolock에 의해 실행되는 쉘 스크립트는 명령 대체에서 일시 중지 값을 유지합니다.

xautolock에 의해 실행되는 쉘 스크립트는 명령 대체에서 일시 중지 값을 유지합니다.

배터리를 무인으로 실행할 때 컴퓨터를 절전 모드로 전환하는 간단한 스크립트를 만들려고 합니다. 다음과 같은 간단한 스크립트가 있습니다.

#!/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 명령을 별도의 스크립트에 넣겠습니다.

관련 정보