Hur man pausar ett Bash-skript med Linux Sleep Command

Sleep-kommandot gör att din Linux-dator inte gör något. Kontraintuitivt kanske, men en period av inaktivitet är ibland precis vad som behövs. Den här artikeln visar hur du använder detta Bash-skalkommando effektivt.

Att använda sömn är lätt. Skriv sleep, ett mellanslag, ett nummer på kommandoraden och tryck sedan på Retur.

sleep 5

Markören försvinner i fem sekunder och kommer sedan tillbaka. Vad hände? Genom att använda viloläge på kommandoraden instrueras Bash att avbryta behandlingen under den tid du angav. I vårt exempel var detta fem sekunder.

Vi kan överföra varaktigheter till sömn i dagar, timmar och minuter, såväl som i sekunder. För att göra detta inkluderar du ett suffix av antingen d, h, m eller s med varaktigheten. För att få sömnen att pausa i en dag, fyra timmar, sju minuter och fem sekunder, använd ett kommando så här:

sleep 1d 4h 7m 5s

Suffixet (i sekunder) är valfritt. Utan suffix kommer sömnen att behandla vilken varaktighet som helst som sekunder. Anta att du ville ha en sömnpaus i fem minuter och tjugo sekunder. Ett korrekt format för detta kommando är:

sleep 5m 20

Om du glömmer att ange m-suffixet för minuternas längd kommer du att instruera sömnen att pausa i fem sekunder och sedan igen i tjugo sekunder. Så sömnen pausar i 25 sekunder.

Många kommandon kräver att du anger parametrar i en specifik ordning, men sömn är mycket förlåtande. Du kan tillhandahålla dem i vilken ordning som helst och sömnen kommer att vara meningsfull ur dem. Du kan också ange ett flyttal som en parameter. Till exempel är 0,5h ett giltigt sätt att indikera att du vill pausa sömnen i en halvtimme.

Alla följande (allt mer excentriska) kommandon talar om för sömnen att pausa i 10 sekunder.

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

Använd sömn för att pausa före ett kommando

Sleep-kommandot kan användas för att ge en paus innan ett kommando utförs. Detta kommando skulle pausa i 15 sekunder och sedan ge ett pip.

sleep 15 && echo -en ' 07'

Använd sömn för att pausa mellan två kommandon

Du kan använda sömn för att ge en paus mellan två kommandon. Detta kommando skulle lista filerna i din dokumentkatalog, pausa i fem sekunder och sedan ändra den nuvarande arbetskatalogen till din hemkatalog:

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

Använda sömn för att pausa exekvering av ett skript

Du kan använda sleep-kommandot i skalskript för att pausa körningen av skriptet under en exakt tid. Vanligtvis skulle du göra detta för att ge en viss process tillräckligt med tid att slutföra innan skriptet fortsätter sin bearbetning. Du kan också använda den för att hastighetsbegränsa de förfrågningar ett skript gör till en annan resurs.

För att visa exakt det, här är ett skript som anropar en Google-webbtjänst med hjälp av curl. När du frågar webbtjänsten med ISBN nummer på en bok, svarar den med en dump av JSON-data om den boken. Vi kan analysera denna data genom att skicka den genom jq-verktyget för att hämta bokens titel. För att skriptet inte ska stressa webbtjänsten sover det en sekund mellan webbförfrågningar.

Skapa en fil som innehåller följande text och spara den som 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."

Skriv följande kommando för att ställa in körningsbehörigheterna och göra skriptet körbart.

chmod +x check_book.sh

Skriptet kräver verktygen curl och jq. Använd apt-get för att installera dessa paket på ditt system om du använder Ubuntu eller annan Debian-baserad distribution. På andra Linux-distributioner, använd din Linux-distributions pakethanteringsverktyg istället.

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

Skapa en textfil som innehåller följande nummer och spara den som books.txt.

9781565921276
9781874416685
9781565921672
9780521431088
9781491941591

Kör skriptet check_book.sh och skicka in filen books.txt som en parameter.

./check_book.sh books.txt

Förfrågningarna görs till Googles webbtjänst med en sekunds intervall. Bokens titel kommer att visas strax efter att varje ISBN-nummer har sökts.

Det är allt som finns att sova. De inre funktionerna i skriptet check_book.sh ligger utanför ramen för denna artikel. Skriptet valdes enbart för att illustrera en giltig användning av sleep-kommandot. Om du vill läsa mer om de två huvudkomponenterna i manuset, se curl projektsida och jq on-line manual.