bash_profile에서 이상하게 작동하는 스크립트(그러나 X 바로 아래)

bash_profile에서 이상하게 작동하는 스크립트(그러나 X 바로 아래)

나는 특정 파일이 비어 있는지 여부를 1분마다 확인하고 비어 있지 않은 경우 랩탑의 LED를 0.5Hz로 깜박이게 하는 간단한 .sh 스크립트를 만들었습니다. 내 에서 이 스크립트를 호출합니다 .bash_profile.

TTY에 있을 때마다 문제 없이 작동합니다. 즉, 파일이 비어 있지 않으면 랩피의 LED가 정확한 빈도로 깜박입니다.

그러나 X를 실행하면( startx도움이 될 수 있으면 호출되는 Xmonad/urxvt를 사용합니다) 이상한 일이 발생합니다. 깜박임 빈도가 불규칙하고 이로 인해 컴퓨터 속도가 약간 느려지고 전화할 때 top다양한 sudo 프로세스(LED를 켜거나 끄기 위해 호출하는 프로세스)가 표시됩니다.

마치 스크립트를 서너번 호출한 것과 같은 동작입니다.

문제를 진단하는 방법을 모르겠습니다. 설명서에는 .bash_profile(로그인 시) 한 번만 읽힌다고 나와 있습니다. 저를 도와주실 수 있나요?

# blink mail led

blinkTime="0.2"
checkTime="60"


while true; do
  hasIt=$(cat ~/someFolder/hazText.txt) # 1: has text

  if [ $hasIt -eq "1" ]
  then
    echo "1" | sudo tee /sys/class/leds/led:alarm/brightness > /dev/null
    sleep $blinkTime
    echo "0" | sudo tee /sys/class/leds/led:alarm/brightness > /dev/null
    sleep $blinkTime
  else
    sleep $checkTime
  fi

done

답변1

.bash_profile작성한 "로그인 시간"이 아닌 Bash가 로그인 쉘로 시작될 때 실행됩니다. 이는 Bash가 "--login"option 또는 as 로 시작할 때마다 "-bash"읽고 실행한다는 의미입니다 .bash_profile. X 세션을 시작하면 암시적으로 여러 Bash 인스턴스가 시작될 가능성이 높습니다(Linux의 기본 셸이므로). 이러한 인스턴스 중 일부는 로그인 셸일 수 있으며 스크립트가 여러 번 호출되어 LED가 디스코 모드로 전환됩니다.

문제에 대한 해결책은 스크립트를 외부로 이동 하고 해당 작업을 .bash_profile생성하거나 다음을 사용하여 다시 작성하는 것입니다.croninotify 도구.

관련 정보