알림 전송은 스크립트에서는 작동하지 않지만 터미널에서는 작동합니다.

알림 전송은 스크립트에서는 작동하지 않지만 터미널에서는 작동합니다.

이 스크립트를 실행하려고 합니다.
test.sh

#!/bin/bash  
BAT_LEVEL=`acpi -b |grep -Eo "[0-9]+%"|grep -Eo "[0-9]+"`
CRIT=0                                                           
if [ $BAT_LEVEL -gt $CRIT ]; then
    echo "foo"
    aplay ~/apert.wav
    notify-send "Battery-Low"
    echo "bar"
fi  

위의 6번째 줄은 notify-send "Battery-Low"터미널에서 예상한 대로 작동합니다.
그러나 스크립트가 실행되면 표준 출력으로 foo출력됩니다 bar.
문제가 무엇인지 모르겠습니다.

답변1

일부 환경 변수가 누락되었습니다. 이 변수일 가능성이 높습니다 DISPLAY. 다음을 시도해 볼 수 있습니다.

echo "foo"                                                   
DISPLAY=:0.0 notify-send "Battery-Low"                                    
echo "bar"

이것이 도움이 되지 않으면 스크립트와 터미널에서 명령을 실행하여 스크립트 내부와 터미널의 환경을 비교할 수 있습니다 env.

또한 스크립트가 루트로 실행되는 경우 다음을 수행해야 할 수도 있습니다.

sudo -u yourUsername DISPLAY=:0.0 notify-send 'Battery low'

관련 정보