Preciso realizar uma operação aritmética dentro de um loop bash conforme explicado abaixo
CYCLE?=3
COUNT=1
download_when_ready: ## Will try the download operations many times till it succeeds or it reaches 10 tries
while ! composer update $(bundle) 2> /dev/null && [[ $(COUNT) -lt 10 ]]; \
do \
COUNT=$$(( $(COUNT)+1 )); \
SLEEP=$$(( ($(COUNT) / $(CYCLE)) + ($(COUNT) % $(CYCLE)) )); \
echo "count $(COUNT)"; \
echo "cycle $(CYCLE)"; \
echo "sleep $(SLEEP)"; \
sleep $(SLEEP); \
done
Isso nunca para e dá o seguinte:
count 0
cycle 4
sleep 0
count 0
cycle 4
sleep 0
....
count 0
cycle 4
sleep 0
Como você pode ver, as variáveis têm os valores iniciais e nunca mudam!
ATUALIZAR
PRETTY_NAME="SUSE Linux Enterprise Server 11 SP4"
No entanto, o código a seguir mantém o valor de $$c
vazio, antes do loop while e dentro dele.
CYCLE?=3
COUNT=1
download_when_ready: ## Will try the download operations many times till it succeeds or it reaches 10 tries
@c=$(COUNT);
@echo $$c;
while ! composer update $(bundle) 2> /dev/null && [[ $(COUNT) -lt 10 ]]; \
do \
echo "$$c"; \
done
ATUALIZAR
Graças ao comentário de @Kusalananda , eu descobri.
Eu usei make variables como valores iniciais para variáveis de shell
E isso funciona!
Obrigado a @Kusalananda & @Stéphane Chazelas