Não há gotono bash.
Aqui está uma solução alternativa suja usando trapqual pula apenas para trás :)
#!/bin/bash -e
trap '
echo I am
sleep 1
echo here now.
' EXIT
echo foo
goto trap 2> /dev/null
echo bar
Resultado:
$ ./test.sh
foo
I am
here now.
Isso não deve ser usado dessa maneira, mas apenas para fins educacionais. Aqui está o porquê disso funcionar:
trapestá usando o tratamento de exceções para obter a alteração no fluxo de código. Nesse caso, trapestá capturando qualquer coisa que faça com que o script EXIT. O comando gotonão existe e, portanto, gera um erro, que normalmente sai do script. Este erro está sendo detectado trape 2>/dev/nulloculta a mensagem de erro que normalmente seria exibida.
Obviamente, essa implementação do goto não é confiável, pois qualquer comando inexistente (ou qualquer outro erro, dessa maneira) executaria o mesmo comando trap. Em particular, você não pode escolher para qual rótulo ir.
Basicamente, no cenário real, você não precisa de nenhuma instrução goto, elas são redundantes, pois chamadas aleatórias para lugares diferentes dificultam a compreensão do seu código.
Se seu código for chamado várias vezes, considere usar loop e altere seu fluxo de trabalho para usar continuee break.
Se o seu código se repetir, considere escrever a função e chamá-la quantas vezes quiser.
Se seu código precisar pular para uma seção específica com base no valor da variável, considere usar a caseinstrução
Se você pode separar seu código longo em partes menores, considere movê-lo para arquivos separados e chame-os a partir do script pai.
gotono bash (pelo menos dizcommand not foundpara mim). Por quê? Provavelmente, existe uma maneira melhor de fazê-lo.