Existuje vestavěný unixový příkaz repeat
jehož první argument je počet opakování příkazu, kde příkaz (s libovolnými argumenty) je určen zbývajícími argumenty k repeat
.
Například,
% repeat 100 echo "I will not automate this punishment."
bude echo daný řetězec 100krát a poté se zastaví.
Chtěl bych podobný příkaz – říkejme mu forever
– to funguje podobně, až na to, že prvním argumentem je počet sekund pro pauzu mezi opakováními a opakuje se donekonečna. Například,
% forever 5 echo "This will get echoed every 5 seconds forever and ever."
Myslel jsem, že se zeptám, jestli něco takového existuje, než to napíšu. Vím, že je to jako dvouřádkový skript v Perlu nebo Pythonu, ale možná existuje standardnější způsob, jak to udělat. Pokud ne, klidně pošlete řešení ve svém oblíbeném skriptovacím jazyce.
PS:Možná by bylo lepší zobecnit repeat
vzít jak počet opakování (s -1 znamená nekonečno), tak počet sekund spánku mezi opakováními.
Výše uvedené příklady by pak vypadaly takto:
% repeat 100 0 echo "I will not automate this punishment."
% repeat -1 5 echo "This will get echoed every 5 seconds forever."
Přijatá odpověď:
Vyzkoušejte watch
příkaz.
Usage: watch [-dhntv] [--differences[=cumulative]] [--help] [--interval=<n>]
[--no-title] [--version] <command>`
Takže:
watch -n1 command
spustí příkaz každou sekundu (dobře, technicky, každou sekundu plus čas potřebný pro command
spustit jako watch
(alespoň procps
a busybox
implementace) pouze spí jednu sekundu mezi dvěma spuštěními command
), navždy.
Chcete předat příkaz exec
místo sh -c
, použijte -x
možnost:
watch -n1 -x command
V systému macOS můžete získat watch
z portů Mac:
port install watch
Nebo jej můžete získat z Homebrew:
brew install watch