Não há dúvidas em sua "pergunta". Eu assumo que a pergunta é "por quê?".
Sempre que LIST
for executado, lsss
falhará, por isso RETRY LIST
será chamado. Então (de dentro de RETRY
) LIST
(como $CMD
) é executado novamente e podemos explicar desde o início.
O Bash nunca ultrapassa $CMD
dentro de RETRY
. Suas duas funções chamam umas às outras, elas se acumulam cada vez mais; nenhum deles realmente sai.
Eu acho que toda a sua abordagem é falha. Eu não sei qual é o propósito exato, mas "tentar um comando por um número limitado de vezes", este pode ser o seu ponto de partida:
(max=5; for n in 'seq 1 $max'; do your_command && break; done)
Um subshell é usado para manter $max
fora do shell atual. Observe que o comando inteiro retorna um código de saída bastante sã.