Você estava quase lá:
forever-sleep() {
if [[ ! $1 -gt 0 ]]; then
print "Usage $0 [time in sec] command -parameter"
return 2
fi
local time=$1
shift 1
while true; do
eval "$@"
print -- "### finished: $(date) ###############################################"
sleep $time
done
}
A sintaxe é então forever-sleep [time in sec] command -parameters
, como
$ forever-sleep 2 date +%s
1373873888
1373873890
1373873892
1373873894
...
Algumas observações:
-
$1 -gt 0
implementa uma verificação rudimentar, se o primeiro parâmetro for numericamente, avaliando$1 > 0
. Um tempo de espera negativo não parece sensato. - usei
while true; do ... done
, mas sua sintaxewhile {} {...}
também funciona. -
shift 1
é usado para descartar o primeiro argumento para a função (que é salvo em$time
, para que posteriormente a variável"$@"
possa ser usada por conveniência. -
eval "$@"
, em contraste com um mero"$@"
, torna possível fazer algumas coisas mais avançadas, comoforever-sleep 2 'foo=$(date); echo $foo'
Por favor, observe as aspas simples no último comando!
- A chamada de impressão fornece um separador visual - goste ou não
;)