Cum să întrerupeți un script Bash cu comanda Linux Sleep

Comanda `sleep` are ca scop principal inducerea unei pauze în activitatea computerului tău Linux. Deși poate părea contraintuitiv, uneori un moment de inactivitate este exact ceea ce se impune. Acest ghid detaliază cum poți valorifica eficient comanda `sleep` în shell-ul Bash.

Utilizarea comenzii `sleep` este foarte simplă. În linia de comandă, scrie `sleep`, lasă un spațiu, introdu un număr și apasă Enter.

sleep 5

Cursorul va dispărea pentru cinci secunde, după care va reveni. Ce s-a întâmplat? Atunci când folosești `sleep` în linia de comandă, îi dai instrucțiuni lui Bash să suspende execuția procesului pentru intervalul specificat. În exemplul anterior, am folosit cinci secunde.

Duratele pentru `sleep` pot fi specificate în zile, ore, minute și secunde. Pentru a face acest lucru, adaugă un sufix `d`, `h`, `m` sau `s` la valoarea duratei. De exemplu, pentru a opri execuția timp de o zi, patru ore, șapte minute și cinci secunde, comanda ar arăta astfel:

sleep 1d 4h 7m 5s

Sufixul `s` (pentru secunde) este opțional. Dacă nu specifici niciun sufix, `sleep` va considera orice durată ca fiind exprimată în secunde. Să presupunem că vrei o pauză de somn de cinci minute și douăzeci de secunde. Formatul corect al comenzii este:

sleep 5m 20

Dacă uiți să adaugi sufixul `m` pentru minute, `sleep` va înțelege că dorești o pauză de cinci secunde și apoi încă una de douăzeci de secunde. Prin urmare, execuția va fi oprită pentru un total de 25 de secunde.

Deși multe comenzi necesită o ordine precisă a parametrilor, `sleep` este foarte flexibilă. Parametrii pot fi introduși în orice ordine, iar `sleep` îi va înțelege corect. În plus, poți folosi și numere cu virgulă mobilă. De exemplu, `0.5h` este o modalitate validă de a indica o pauză de o jumătate de oră.

Următoarele comenzi (în ordine crescătoare de excentricitate) au ca efect o pauză de 10 secunde:

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

Utilizarea comenzii `sleep` pentru a temporiza o comandă

Comanda `sleep` poate fi folosită pentru a introduce o pauză înainte de executarea unei alte comenzi. Comanda de mai jos va aștepta 15 secunde și apoi va emite un semnal sonor.

sleep 15 && echo -en ' 07'

Utilizarea `sleep` pentru a introduce pauze între două comenzi

Poți folosi `sleep` pentru a crea o pauză între execuția a două comenzi. Comanda de mai jos va afișa fișierele din directorul tău „Documents”, va aștepta cinci secunde și apoi va schimba directorul curent cu directorul principal:

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

Utilizarea comenzii `sleep` pentru a întrerupe un script

În scripturile shell, comanda `sleep` poate fi utilizată pentru a suspenda execuția scriptului pentru o durată determinată. Această tehnică este utilă, de obicei, pentru a acorda unui proces timp suficient să se finalizeze înainte ca scriptul să-și continue execuția. De asemenea, `sleep` poate fi folosit pentru a limita frecvența solicitărilor pe care un script le trimite către o altă resursă.

Pentru a ilustra acest lucru, iată un script care interacționează cu un serviciu web Google folosind `curl`. Când întrebi serviciul web cu numărul ISBN al unei cărți, acesta răspunde cu un set de date JSON. Datele pot fi analizate cu utilitarul `jq` pentru a extrage titlul cărții. Pentru a evita suprasolicitarea serviciului web, scriptul așteaptă o secundă între fiecare solicitare.

Creează un fișier cu următorul text și salvează-l sub numele `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."

Introdu următoarea comandă pentru a seta permisiunile de execuție și a face scriptul executabil.

chmod +x check_book.sh

Scriptul necesită utilitarele `curl` și `jq`. Instalează aceste pachete folosind `apt-get` dacă utilizezi Ubuntu sau o altă distribuție bazată pe Debian. Pe alte distribuții Linux, folosește instrumentul de gestionare a pachetelor al distribuției tale.

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

Creează un fișier text cu următoarele numere și salvează-l ca `books.txt`.

9781565921276
  9781874416685
  9781565921672
  9780521431088
  9781491941591

Rulează scriptul `check_book.sh`, introducând fișierul `books.txt` ca parametru.

./check_book.sh books.txt

Solicitările către serviciul web Google sunt trimise la intervale de o secundă. Titlul cărții va apărea la scurt timp după ce fiecare număr ISBN este interogat.

Acesta este totul despre utilizarea comenzii `sleep`. Detaliile de funcționare internă ale scriptului `check_book.sh` depășesc sfera acestui ghid. Scriptul a fost ales doar ca exemplu relevant pentru utilizarea comenzii `sleep`. Dacă dorești să afli mai multe despre componentele principale ale scriptului, poți consulta pagina proiectului `curl` și manualul online `jq`.