There's a built-in Unix command repeat
whose first argument is the number of times to repeat a command, where the command (with any arguments) is specified by the remaining arguments to repeat
.
For example,
% repeat 100 echo "I will not automate this punishment."
will echo the given string 100 times and then stop.
I'd like a similar command – let's call it forever
– that works similarly except the first argument is the number of seconds to pause between repeats, and it repeats forever. For example,
% forever 5 echo "This will get echoed every 5 seconds forever and ever."
I thought I'd ask if such a thing exists before I write it. I know it's like a 2-line Perl or Python script, but maybe there's a more standard way to do this. If not, feel free to post a solution in your favorite scripting language.
PS: Maybe a better way to do this would be to generalize repeat
to take both the number of times to repeat (with -1 meaning infinity) and the number of seconds to sleep between repeats.
The above examples would then become:
% repeat 100 0 echo "I will not automate this punishment."
% repeat -1 5 echo "This will get echoed every 5 seconds forever."
Best Answer
Try the
watch
command.So that:
will run the command every second (well, technically, every one second plus the time it takes for
command
to run aswatch
(at least theprocps
andbusybox
implementations) just sleeps one second in between two runs ofcommand
), forever.Would you want to pass the command to
exec
instead ofsh -c
, use-x
option:On macOS, you can get
watch
from Mac Ports:Or you can get it from Homebrew: