Jak pozastavit Bash skript pomocí příkazu Linux Sleep

Příkaz spánku způsobí, že váš počítač se systémem Linux nedělá nic. Možná je to kontraintuitivní, ale období nečinnosti je někdy přesně to, co je potřeba. Tento článek ukazuje, jak efektivně používat tento příkaz prostředí Bash.

Použití spánku je snadné. Na příkazovém řádku zadejte sleep, mezeru, číslo a stiskněte Enter.

sleep 5

Kurzor na pět sekund zmizí a poté se vrátí. Co se stalo? Použití režimu spánku na příkazovém řádku dává Bashovi pokyn, aby pozastavil zpracování na dobu, kterou jste zadali. V našem příkladu to bylo pět sekund.

Dobu spánku můžeme předávat ve dnech, hodinách a minutách, stejně jako v sekundách. Chcete-li to provést, použijte příponu d, h, m nebo s s dobou trvání. Chcete-li způsobit pozastavení spánku na jeden den, čtyři hodiny, sedm minut a pět sekund, použijte příkaz jako tento:

sleep 1d 4h 7m 5s

Přípona s (pro sekundy) je volitelná. Bez přípony bude spánek považovat jakoukoli dobu za sekundy. Předpokládejme, že byste chtěli mít pauzu ve spánku na pět minut a dvacet sekund. Jeden správný formát tohoto příkazu je:

sleep 5m 20

Pokud zapomenete zadat příponu m pro trvání minut, dostanete pokyn k pozastavení spánku na pět sekund a poté znovu na dvacet sekund. Spánek se tedy na 25 sekund pozastaví.

Mnoho příkazů vyžaduje zadání parametrů v určitém pořadí, ale spánek je velmi shovívavý. Můžete je poskytnout v libovolném pořadí a spánek z nich bude mít smysl. Jako parametr můžete také zadat číslo s pohyblivou řádovou čárkou. Například 0,5 h je platný způsob, jak označit, že si přejete, aby se spánek na půl hodiny pozastavil.

Všechny následující (stále excentričtější) příkazy sdělují spánku, aby se na 10 sekund zastavil.

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

Použití režimu spánku k pozastavení před příkazem

Příkaz spánku lze použít k pozastavení před provedením příkazu. Tento příkaz se pozastaví na 15 sekund a poté vydá pípnutí.

sleep 15 && echo -en ' 07'

Použití režimu spánku k pozastavení mezi dvěma příkazy

Můžete použít režim spánku k vytvoření pauzy mezi dvěma příkazy. Tento příkaz vypíše soubory ve vašem adresáři Dokumenty, pozastaví se na pět sekund a poté změní aktuální pracovní adresář na váš domovský adresář:

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

Použití režimu spánku k pozastavení provádění skriptu

Příkaz sleep ve skriptech shellu můžete použít k pozastavení provádění skriptu na přesně stanovenou dobu. Obvykle byste to udělali, abyste určitému procesu poskytli dostatek času na dokončení, než bude skript pokračovat ve zpracování. Můžete jej také použít k omezení rychlosti požadavků skriptu na jiný zdroj.

Abychom to přesně demonstrovali, zde je skript, který volá webovou službu Google pomocí curl. Při dotazu na webovou službu pomocí ISBN číslo knihy, odpoví výpisem dat JSON týkajících se této knihy. Tato data můžeme analyzovat tak, že je předáme pomocí nástroje jq, abychom získali název knihy. Aby skript nezatěžoval webovou službu, mezi webovými požadavky na jednu sekundu spí.

Vytvořte soubor obsahující následující text a uložte jej jako 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."

Zadejte následující příkaz, chcete-li nastavit oprávnění ke spuštění a nastavit skript jako spustitelný.

chmod +x check_book.sh

Skript vyžaduje obslužné programy curl a jq. Pokud používáte Ubuntu nebo jinou distribuci založenou na Debianu, použijte apt-get k instalaci těchto balíčků do vašeho systému. V jiných distribucích Linuxu použijte místo toho nástroj pro správu balíčků vaší distribuce Linuxu.

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

Vytvořte textový soubor obsahující následující čísla a uložte jej jako books.txt.

9781565921276
9781874416685
9781565921672
9780521431088
9781491941591

Spusťte skript check_book.sh a předejte soubor books.txt jako parametr.

./check_book.sh books.txt

Požadavky jsou odesílány webové službě Google v jednosekundových intervalech. Název knihy se objeví krátce po každém dotazu na číslo ISBN.

To je vše ke spánku. Vnitřní fungování skriptu check_book.sh přesahuje rámec tohoto článku. Skript byl zvolen čistě pro ilustraci platného použití příkazu sleep. Pokud si chcete přečíst více o dvou hlavních složkách skriptu, podívejte se na curl stránka projektu a jq on-line manuál.