![腳本在 bash_profile 中表現奇怪(但就在 X 下)](https://rvso.com/image/1366226/%E8%85%B3%E6%9C%AC%E5%9C%A8%20bash_profile%20%E4%B8%AD%E8%A1%A8%E7%8F%BE%E5%A5%87%E6%80%AA%EF%BC%88%E4%BD%86%E5%B0%B1%E5%9C%A8%20X%20%E4%B8%8B%EF%BC%89.png)
我製作了一個簡單的 .sh 腳本,它每分鐘檢查特定文件是否為空,如果不為空,則使筆記型電腦上的 LED 以 0.5Hz 的頻率閃爍。我從我的.bash_profile
.
每當我在 TTY 中時,它都會完美地工作(也就是說:當文件不為空時,我筆記本上的 LED 會以精確的頻率閃爍)。
但是當我運行 X 時(我使用 Xmonad/urxvt,startx
如果可以幫助的話透過呼叫)會發生一些奇怪的事情。閃爍的頻率不穩定,它會減慢機器的速度(有點),當我打電話時,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 作為登入 shell 啟動時執行,而不是像您所寫的那樣「在登入時」執行。這意味著每次 Bash 以"--login"
option 或 as啟動時"-bash"
,它都會被讀取並執行.bash_profile
。啟動 X 會話很可能會隱式啟動多個 Bash 實例(因為它是 Linux 上的預設 shell)。其中一些實例可能恰好是登入 shell,您的腳本被調用多次,這使您的 LED 進入迪斯可模式。
問題的解決方案是將腳本移出.bash_profile
,並cron
為其建立作業,或使用重寫它inotify 工具。