Não é possível executar o script bash (elemento inesperado '(')

0

Eu criei um script para verificar se eu instalei o Node, Npm, Bower e Susy, mas quando eu executo eu recebo um erro que não posso resolver.

Este é o script:

    isInstalled(){
  command -v $1 >/dev/null 2>&1 || command -v $2 >/dev/null 2>&1 || { echo >&2 "I require $1 but it's not installed.  Aborting."; return false;}  
}

installNode() {
  if [[ !isInstalled('node', 'nodejs') ]]; then
    echo "Node is not installed. Installing..."
    curl https://www.npmjs.org/install.sh | sh
  fi
}

installBower()
{

   if [[ !isInstalled('npm') ]]; then
     echo "Npm is not installed. Installing..."
     curl -L https://npmjs.org/install.sh | sh
   else
     echo "Npm is installed. Checcking Bower..."
   if [[ !isInstalled('bower') ]]; then
     echo "Bower is not installed. Installing..."
     npm install -g bower
   fi

}

installSusy()
{

  if [[ !isInstalled('npm') ]]; then
     echo "Npm is not installed. Installing..."
     curl -L https://npmjs.org/install.sh | sh
   else
     echo "Npm is installed. Checcking Bower..."
   if [[ !isInstalled('bower') ]]; then
     echo "Susy is not installed. Installing..."
     npm install susy
   fi


}

Esta é a mensagem de erro:

begin.sh: 6: begin.sh: Syntax error: "(" unexpected (expecting "then")

Eu sei que esta pergunta é bastante estúpida e é por causa da minha falta de experiência em scripts bash. Eu também tentei googling antes de postar, mas acho que o erro é tão básico que não consigo encontrar uma resposta. Obrigado por tudo.

    
por Ejher 15.12.2015 / 11:28

1 resposta

5

As funções em bash são chamadas como comandos e não como funções em outros idiomas. Em vez de isInstalled('node', 'nodejs') , faça:

isInstalled 'node' 'nodejs'

E a condição if ficaria assim:

if ! isInstalled 'node' 'nodejs';
then
    ...
    
por 15.12.2015 / 11:32