Ubuntu
如果命令達到超時執行其他命令
我正在嘗試為我學校的電腦設置一個腳本,該腳本會在一天結束時自動關閉它們(因為大多數老師都忘記了它們)。
我想發送一個zenify警告框通知使用者PC將關閉,如果使用者在1分鐘內未確認,PC將關閉。
sudo shutdown -h now
我知道 timeout 命令的存在,但在這種情況下,如果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 程序超時時如何執行命令?
您需要檢查退出狀態並據此做出決定。GNU超時手冊說
如果命令超時,並且 –preserve-status 未設置,則以狀態 124 退出。
所以,在一個 shell 腳本中,你會做這樣的事情:
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