O que há de errado com meu array bash?

1

Alguém pode me dizer por que este script bash funciona se eu cortar e colá-lo para o terminal, mas lança "server_prep.sh: 7: erro de sintaxe:" ("inesperado" quando lançado usando $ sudo sh server_prep.sh?

#!/bin/sh

#Packages
apt-get -y install ssh libsqlite3-dev ruby-full mercurial

#Gems
required_gems = ( rake rails sqlite3-ruby )

#Set up directories
[ ! -d /var/www ] && mkdir /var/www
[ ! -d /var/www/apps ] && mkdir /var/www/apps

#install gems manually
if ! which gem >/dev/null; then
    wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
    tar xvfz rubygems-1.3.5.tgz
    ruby rubygems-1.3.5/setup.rb
    ln -s /usr/bin/gem1.8 /usr/bin/gem
    gem update --system

    #Tidy Up
    rm -rf rubygems-1.3.5.tgz rubygems-1.3.5
fi

#Install required gems
for required_gem in "${required_gems[@]}"
do
    if ! gem list | grep $required_gem >/dev/null; then
        gem install $required_gems
    fi
done

Obrigado antecipadamente!

    
por ChrisInCambo 13.09.2009 / 21:33

3 respostas

5

Seu script está usando sh, não bash, quando é executado. Pode haver uma pequena diferença de sintaxe entre os dois.

Tente alterar !#/bin/sh para !#/bin/bash na parte superior do seu script

    
por 13.09.2009 / 21:36
8

Você não pode ter espaços ao atribuir variáveis em sh / bash. Tem que ser:

required_gems=( rake rails sqlite3-ruby )

Em qualquer caso, não precisa ser uma matriz, você poderia fazer:

required_gems="fake rails sqlite3-ruby"

e depois

for required_gem in ${required_gems}; do
  blah blah
done

Observe que não há "" cerca de $ {required_gems}

    
por 13.09.2009 / 22:01
2

A terceira à última linha, deve $required_gems ler $required_gem ?

    
por 13.09.2009 / 21:41

Tags