erro de script de shell: Erro de sintaxe: “(” inesperado

0

Eu verifiquei a postagem anterior sobre esse erro. ainda não conseguiu a solução funcionando. Aqui está o meu script bash. Alguém pode me ajudar a descobrir o problema. Eu usei o link para ver qualquer erro. Eu não encontrei nenhum.

Erro:

Dockerfunctiontest.sh: 2: Dockerfunctiontest.sh: Syntax error: "(" unexpected

script :

#!/bin/bash
function BuildSimpleContainer ()
{
docker search mariadb
docker pull mariadb:latest
docker run --name mariadbtestfour -e MYSQL_ROOT_PASSWORD=mypass -d mariadb --log-bin --binlog-format=MIXED
docker exec -it mariadbtest bash
apt-get -qq update
apt-get -qq -y install curl
apt-get -qq -y install wget
apt-get update
apt-get install apt-transport-https
apt-get update
cd /home
mkdir mdsd
cd mdsd/
wget '<blob url to pfx file>'
echo "certififcate Downloaded"
wget '<blob url file1>'
echo "file1 Downloaded"
wget 'blob url file2'
echo "file2 Downloaded"
}   
BuildSimpleContainer
    
por Bobby 26.02.2018 / 20:24

1 resposta

4

Meu palpite é que você não executa este script como um script Bash, mas com algum outro shell, que não aceita essa sintaxe. Por exemplo. sh .

Como você pode ver no Shellcheck, e como o man do Bash no meu Debian confirma, esta sintaxe está correta:

name () compound-command [redirection]
function name [()] compound-command [redirection]

Você está usando o segundo dos dois acima e seu compound-command é o conteúdo das chaves {...} . E tudo bem, até onde man bash vai. Mas então, há vozes contra esse constructo, como no link no comentário de John Moon abaixo da outra resposta. E no link para o Greg's Wiki nessa resposta novamente.

Voltando à sua pergunta, levando em consideração o nome do script, ou seja, Dockerfunctiontest.sh , acho que você não vê muita diferença entre sh e bash . Provavelmente você executa o script com este comando:

sh Dockerfunctiontest.sh

Embora seja razoável executá-lo com:

bash Dockerfunctiontest.sh

ou

./Dockerfunctiontest.sh

O último escolhe o interpretador baseando-se na primeira linha do script, a saber:

#!/bin/bash

E enquanto o intérprete nomeado no script é Bash, por que não nomear o arquivo da maneira correta?

Dockerfunctiontest.bash

Menos confusão no futuro.

    
por 26.02.2018 / 21:13