Se o comando atingir o tempo limite, execute outro comando

3

Estou tentando criar um script para o computador da minha escola que os desligue automaticamente no final do dia (já que a maioria dos professores os esqueceu).

Eu pensei em enviar uma caixa de aviso do zenify para informar ao usuário que o PC vai desligar e, se o usuário não confirmar em 1 minuto, o PC é desligado.

Eu sei a existência do comando timeout, mas neste caso eu quero chamar sudo shutdown -h now se o comando zenity não retornar em 60 segundos.

Eu estava tentando fazer algo parecido com

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."

O comando seria executado em um script cron.

Então, a questão é : Como posso executar um comando quando o tempo limite do programa zenity?

    
por Giulio 17.10.2016 / 19:08

1 resposta

4

Você precisará verificar o status de saída e tomar uma decisão com base nisso. O manual para o tempo limite do GNU diz que

If the command times out, and --preserve-status is not set, then exit with status 124.

Então, em um script de shell, você faria algo assim:

timeout 60 zenity ...
if [ $? = 124 ] ; then
    echo it timed out, do something...
else
    echo didn't time out
fi

No entanto, parece que o zenity oferece suporte a um tempo limite em si , para que você não use é necessário um tempo limite externo:

zenity --timeout 60 --warning --text="Shutdown in 60"
if [ $? = 5 ] ; then
    sudo shutdown -h now
fi

Mesmo se estiver usando o tempo limite do Zenity, não parece mostrar o tempo restante. No entanto, ele possui um modo de barra de progresso que pode ser usado para transmitir uma sensação de destruição iminente. Algo assim exibiria um cronômetro de contagem regressiva de 60 com uma barra de progresso preenchendo ao mesmo tempo:

#!/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
    
por 17.10.2016 / 19:36