Domine o Comando `sleep` no Linux: Pausas Eficientes em Scripts e Comandos

O comando sleep no Linux instrui seu computador a aguardar, ou seja, a não executar nenhuma ação por um tempo determinado. Embora possa parecer contraditório, essa pausa temporária pode ser crucial em várias situações. Este artigo explora como usar este comando do shell Bash de maneira eficaz.

A utilização do sleep é direta. No terminal, basta digitar sleep, inserir um espaço, especificar um valor numérico e pressionar Enter.

sleep 5

O cursor ficará invisível por cinco segundos e depois reaparecerá. Essencialmente, o comando sleep interrompe o processamento do Bash pelo intervalo definido. No exemplo acima, a pausa foi de cinco segundos.

O comando sleep suporta diferentes unidades de tempo, como dias, horas e minutos, além de segundos. Para especificar estas unidades, adicionamos os sufixos d, h, m ou s ao valor numérico. Por exemplo, para fazer o comando pausar por um dia, quatro horas, sete minutos e cinco segundos, a sintaxe seria:

sleep 1d 4h 7m 5s

O sufixo s (segundos) é opcional. Se nenhum sufixo for adicionado, o comando sleep interpretará o valor como segundos. Digamos que você queira uma pausa de cinco minutos e vinte segundos. O comando correto seria:

sleep 5m 20

Caso o sufixo m seja omitido para minutos, o comando entenderá que são cinco segundos, seguido de mais vinte segundos. Portanto, a pausa seria de 25 segundos.

Muitos comandos requerem uma ordem específica para os seus parâmetros, mas sleep é bastante flexível. Você pode especificar os parâmetros em qualquer ordem e o comando os interpretará corretamente. Além disso, ele aceita números decimais. Por exemplo, 0.5h é uma forma válida de indicar uma pausa de meia hora.

Os seguintes comandos, apresentados de forma crescente em excentricidade, instruem o sleep a aguardar por 10 segundos:

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

Utilizando o sleep para retardar a execução de um comando

O comando sleep pode ser usado para criar uma pausa antes da execução de outro comando. Por exemplo, este comando pausará por 15 segundos e, em seguida, emitirá um som de bipe.

sleep 15 && echo -en ' 07'

Usando sleep para criar pausas entre comandos

É possível utilizar o sleep para inserir pausas entre a execução de comandos. O seguinte comando listará os arquivos no diretório Documentos, pausará por cinco segundos e depois mudará o diretório de trabalho para o diretório inicial do usuário.

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

sleep em Scripts para Pausar a Execução

Em scripts shell, o comando sleep permite suspender a execução do script por um período específico. Isso é frequentemente usado para permitir que outros processos tenham tempo para concluir suas tarefas antes que o script continue a execução. Além disso, pode ser útil para controlar a taxa de requisições que um script envia a outros recursos.

Para exemplificar, o script abaixo utiliza o curl para acessar um serviço web do Google. Ao fornecer um número ISBN de um livro, o serviço responde com dados JSON sobre o livro. Esses dados são processados pelo utilitário jq para extrair o título do livro. Para evitar sobrecarregar o serviço web, o script utiliza o sleep para pausar por um segundo entre as requisições.

Crie um arquivo com o seguinte conteúdo 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 "Concluído."

Para tornar o script executável, use o comando abaixo:

chmod +x check_book.sh

O script requer os utilitários curl e jq. Em sistemas baseados em Debian, como Ubuntu, use o apt-get para instalar esses pacotes. Em outras distribuições Linux, utilize o gerenciador de pacotes correspondente.

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

Crie um arquivo de texto, books.txt, e salve-o com a seguinte lista de números ISBN:

9781565921276
9781874416685
9781565921672
9780521431088
9781491941591

Execute o script check_book.sh passando o arquivo books.txt como parâmetro:

./check_book.sh books.txt

O script fará requisições ao serviço web do Google com um intervalo de um segundo entre cada uma. Após cada requisição, o título do livro correspondente ao ISBN será exibido.

O funcionamento interno do script check_book.sh é detalhado em outros materiais. O script foi utilizado apenas para ilustrar um exemplo prático do uso do comando sleep. Para mais informações sobre os componentes principais do script, consulte a página do projeto curl e o manual online do jq.