저는 학교 컴퓨터가 하루가 끝나면 자동으로 종료되도록 스크립트를 설정하려고 합니다(대부분의 교사는 이를 잊어버리기 때문입니다).
PC가 종료된다는 것을 사용자에게 알리기 위해 zenify 경고 상자를 보내고, 사용자가 1분 이내에 확인하지 않으면 PC가 종료됩니다.
시간 초과 명령이 존재한다는 것을 알고 있지만 이 경우 sudo shutdown -h now
명령 zenity
이 60초 이내에 반환되지 않으면 호출하고 싶습니다.
나는 다음과 같은 것을하려고 노력하고 있습니다.
timeout 60 --onTimeout="sudo shutdown -h now" zenity --warning --text="This PC is going to shut down in a minute if you DO NOT press the OK button."
이 명령은 cron 스크립트에서 실행됩니다.
그래서,문제는:zenity 프로그램 시간 초과 시 명령을 실행하는 방법은 무엇입니까?
답변1
종료 상태를 확인하고 그에 따라 결정을 내려야 합니다. 이것GNU 시간 초과 매뉴얼설명하다
명령 시간이 초과되고 --preserve-status가 설정되지 않은 경우 상태 124로 종료됩니다.
따라서 쉘 스크립트에서는 다음을 수행할 수 있습니다.
timeout 60 zenity ...
if [ $? = 124 ] ; then
echo it timed out, do something...
else
echo didn't time out
fi
그러나 그것은 보인다zenity는 기본적으로 시간 초과를 지원합니다., 따라서 외부 시간 초과가 필요하지 않습니다.
zenity --timeout 60 --warning --text="Shutdown in 60"
if [ $? = 5 ] ; then
sudo shutdown -h now
fi
Zenity 자체 타임아웃을 사용해도 남은 시간이 표시되지 않는 것 같습니다. 그러나 임박한 파멸의 느낌을 전달하는 데 사용할 수 있는 진행률 표시줄 모드가 있습니다. 다음과 같이 진행률 표시줄이 채워지는 동안 타이머가 60부터 카운트다운되는 것으로 표시됩니다.
#!/bin/bash
timeout=60
for (( i=0 ; i <= $timeout ; i++ )) do
echo "# Shutdown in $[ $timeout - $i ]..."
echo $[ 100 * $i / $timeout ]
sleep 1
done | zenity --progress --title="Shutting down automatically..." \
--window-icon=warning --width=400 --auto-close
if [ $? = 0 ] ; then
echo timeout passed
else
echo cancel was pressed or zenity failed somehow
fi