![bash_profile에서 이상하게 작동하는 스크립트(그러나 X 바로 아래)](https://rvso.com/image/1366226/bash_profile%EC%97%90%EC%84%9C%20%EC%9D%B4%EC%83%81%ED%95%98%EA%B2%8C%20%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8(%EA%B7%B8%EB%9F%AC%EB%82%98%20X%20%EB%B0%94%EB%A1%9C%20%EC%95%84%EB%9E%98).png)
나는 특정 파일이 비어 있는지 여부를 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
생성하거나 다음을 사용하여 다시 작성하는 것입니다.cron
inotify 도구.