알림 보내기는 스크립트에서는 작동하지 않지만 터미널에서는 작동합니다.


1

이 스크립트를 실행하려고합니다.
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  

위의 여섯 번째 줄은 notify-send "Battery-Low"터미널에서 예상대로 작동합니다.
스크립트가 실행될 때 그냥 그대로 출력 foobar표준 출력에.
나는 문제가 무엇인지 전혀 모른다.


쉘 프롬프트에서이 스크립트를 호출하고 있습니까? 그렇지 않다면 어떻게?
Gilles

파일을 실행 가능하게 만들었습니다. 내가하고있는 일은 emacs ./test.sh내부 M-x shell의 파일 디렉토리에 있습니다.
Bibek_G

글쎄, 그 생각을했다. 터미널 에뮬레이터에서 스크립트가 제대로 실행됩니다. 왜 이맥스 쉘에서 작동하지 않아야하는지 알 수 없습니다! 또한 aplay줄은 나에게도 오류를 준다.
Bibek_G

답변:


2

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

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

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

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

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

나는 실제로 스크립트를 루트로 실행하고있었습니다. 하지만 그래도 알림이 표시되지 않습니다 sudo -u bibek DISPLAY=0.0 notify-send "battery-low". 나에게도 오류가 발생하지 않습니다.
Bibek_G

@coder_Bibek 또한 변수 DBUS_SESSION_BUS_ADDRESS를 일반 세션 의 변수로 설정해야합니다 . 스크립트를 실행하는 방법, 지금까지 말한 내용이 이상합니다 (루트 이맥스 내부에서? Emacs를 루트로 실행하고 있습니까?).
Gilles

작동 :하려면 이전에 있어야합니다 0.0. 그러나 그렇습니다. 알림을 보내려면 세션 버스가 필요하며,이를 확보 할 수있는 확실한 방법을 생각할 수 없습니다. env설정되어 있는지 확인 하십시오.
tripflag

env | grep DBUSDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus쉘과 root 모두에서 동일한 출력 을 쉘에 제공하십시오 bibek. 그리고 네, sudo emacs &터미널 에뮬레이터에서 루트로 emacs를 실행하고 있습니다. (정상적인 emacs 세션으로 루트 파일에 액세스하는 것은 기껏해야 고통스럽고, 아직 다른 방법은 시도하지 않았습니다.)
Bibek_G
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.