Como pausar um script Bash com o comando Linux Sleep

O comando sleep faz com que seu computador Linux não faça nada. Pode ser contra-intuitivo, mas um período de inatividade às vezes é exatamente o que é necessário. Este artigo mostra como usar esse comando shell Bash de maneira eficaz.

Usar o sono é fácil. Na linha de comando, digite sleep, um espaço, um número e pressione Enter.

sleep 5

O cursor desaparecerá por cinco segundos e depois retornará. O que aconteceu? Usar sleep na linha de comando instrui o Bash a suspender o processamento pela duração fornecida. Em nosso exemplo, foram cinco segundos.

Podemos passar as durações para dormir em dias, horas e minutos, bem como em segundos. Para fazer isso, inclua um sufixo de d, h, m ou s com a duração. Para fazer com que o sono pause por um dia, quatro horas, sete minutos e cinco segundos, use um comando como este:

sleep 1d 4h 7m 5s

O sufixo s (para segundos) é opcional. Sem sufixo, o sono tratará qualquer duração como segundos. Suponha que você queira fazer uma pausa para dormir por cinco minutos e vinte segundos. Um formato correto deste comando é:

sleep 5m 20

Se você se esquecer de fornecer o sufixo m na duração dos minutos, instruirá o sono a fazer uma pausa de cinco segundos e depois novamente por vinte segundos. Portanto, o sono fará uma pausa de 25 segundos.

Muitos comandos exigem que você forneça parâmetros em uma ordem específica, mas o sono é muito indulgente. Você pode fornecê-los em qualquer ordem e o sono fará sentido com eles. Você também pode fornecer um número de ponto flutuante como parâmetro. Por exemplo, 0,5h é uma forma válida de indicar que você deseja que o sono pause por meia hora.

Todos os comandos a seguir (cada vez mais excêntricos) dizem ao sono para pausar por 10 segundos.

sleep 10
sleep 5 5s
Sleep 1 1 1s 1 1 1s 1 2
sleep 0.16667m

Usando Sleep para fazer uma pausa antes de um comando

O comando sleep pode ser usado para dar uma pausa antes da execução de um comando. Este comando faria uma pausa de 15 segundos e, em seguida, emitiria um bipe.

sleep 15 && echo -en ' 07'

Usando Sleep para Pausar Entre Dois Comandos

Você pode usar o sono para dar uma pausa entre dois comandos. Este comando listaria os arquivos no diretório Documentos, faria uma pausa de cinco segundos e mudaria o diretório de trabalho atual para o seu diretório inicial:

ls -R ~/Documents && sleep 5 && cd ~

Usando Sleep para pausar a execução de um script

Você pode usar o comando sleep em scripts de shell para pausar a execução do script por um período de tempo preciso. Normalmente, você faria isso para permitir que algum processo tivesse tempo suficiente para ser concluído antes que o script continuasse seu processamento. Você também pode usá-lo para limitar a taxa de solicitações que um script faz a outro recurso.

Para demonstrar exatamente isso, aqui está um script que chama um serviço da web do Google usando curl. Quando você consulta o serviço da web com o ISBN número de um livro, ele responde com um despejo de dados JSON sobre esse livro. Podemos analisar esses dados passando-os pelo utilitário jq para recuperar o título do livro. Para que o script não sobrecarregue o serviço da web, ele dorme por um segundo entre as solicitações da web.

Crie um arquivo contendo o seguinte texto e salve-o como check_book.sh.

#!/bin/bash

for book in `cat $1`
do
 echo $book":"
 curl -s https://www.googleapis.com/books/v1/volumes?q=isbn:$book | jq '.items | .[] | .volumeInfo.title'
 echo ""
 sleep 1
done

echo "All done."

Digite o seguinte comando para definir as permissões de execução e tornar o script executável.

chmod +x check_book.sh

O script requer os utilitários curl e jq. Use apt-get para instalar esses pacotes em seu sistema se estiver usando Ubuntu ou outra distribuição baseada em Debian. Em outras distribuições Linux, use a ferramenta de gerenciamento de pacotes da distribuição Linux.

sudo apt-get install curl
sudo apt-get install jq

Crie um arquivo de texto contendo os seguintes números e salve-o como books.txt.

9781565921276
9781874416685
9781565921672
9780521431088
9781491941591

Execute o script check_book.sh e passe o arquivo books.txt como um parâmetro.

./check_book.sh books.txt

As solicitações são feitas ao serviço da web do Google em intervalos de um segundo. O título do livro aparecerá logo após a consulta de cada número ISBN.

Isso é tudo que há para dormir. O funcionamento interno do script check_book.sh está além do escopo deste artigo. O script foi escolhido puramente para ilustrar um uso válido do comando sleep. Se você deseja ler mais sobre os dois componentes principais do script, consulte o curl página do projeto e o jq manual online.