Erro de sintaxe próximo ao token inesperado feito ao fazer o loop de uma linha com várias instruções

0

Eu tenho o seguinte código como parte de um arquivo maior (suponha ${tools_urls} , ${tempFolder} são variáveis globais)

download_tools()
{
    for i in ${tools_urls}; do
        wget --no-check-certificate --directory-prefix=${tempFolder} ${i} || { echo "download failed" ; exit 3}
    done
}

Quando executo o script, recebo o seguinte erro:

syntax error near unexpected token 'done'

No entanto, se eu remover a parte || { echo "download failed" ; exit 3} do loop, isso funciona.

Por que isso acontece? Não vejo nada de errado com o meu código e não consigo encontrar exemplos semelhantes que envolvam várias instruções em uma linha

    
por 9a3eedi 28.10.2015 / 07:51

1 resposta

3

Um comando composto com chaves deve ter ponto e vírgula depois de cada comando:

{ cmd1; cmd2; cmd3; }

Então mude para:

... || { echo "download failed" ; exit 3; }

Observe que o espaço após o último comando é necessário:

The braces are reserved words, so they must be separated from the list (the commands) by blanks or other shell metacharacters.

Além disso, observe que você deve citar suas variáveis:

wget --no-check-certificate --directory-prefix="${tempFolder}" "${i}"
    
por 28.10.2015 / 07:54