Bash se o comando não terminar no tempo X?

6

Estou tentando executar algo como:

sudo dhclient $wifi || otherFunction

O problema é quando dhclient falha, apenas trava ao invés de gerar um erro.

Como posso reescrever o acima, então dhclient é eliminado e otherFunction é chamado se dhclient não terminar em 60 segundos?

    
por Philip Kirkbride 17.11.2017 / 21:18

3 respostas

7

Sua tag fornece tudo:

sudo timeout 60 dhclient $wifi || otherFunction

Um exemplo:

sudo timeout 3 sleep 5 || echo finished early

Isso usa o utilitário timeout fornecido pelo pacote GNU coreutils no Linux.

    
por 17.11.2017 / 21:21
2

Use timeout .

timeout 2 sleep 1
echo $?
0

timeout 1 sleep 2
echo $?
124
    
por 17.11.2017 / 21:22
1

Use o timeout compactado como gtimeout com a coreutils port em brew :

brew install coreutils
gtimeout --help

Isso funcionará com /usr/local/bin no seu PATH . Se você quiser usar timeout como originalmente nomeado, adicione /usr/local/opt/coreutils/libexec/gnubin ao seu PATH .

    
por 16.08.2018 / 03:21

Tags