Назад | Перейти на главную страницу

Что не так с моим массивом bash?

Может ли кто-нибудь сказать мне, почему этот сценарий bash работает, если я вырезал и вставил его в терминал, но выдает «server_prep.sh: 7: Syntax error:» («неожиданно» при запуске с использованием $ 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

Заранее спасибо!

У вас не может быть пробелов при назначении переменных в sh / bash. Должно быть:

required_gems=( rake rails sqlite3-ruby )

В любом случае это не обязательно должен быть массив, вы можете просто сделать:

required_gems="fake rails sqlite3-ruby"

а потом

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

Обратите внимание, что около $ {required_gems} нет ""

Ваш скрипт при выполнении использует sh, а не bash. Между ними может быть небольшая разница в синтаксисе.

Попробуйте изменить !#/bin/sh к !#/bin/bash в верхней части вашего скрипта

Третья и последняя строка должна $required_gems читать $required_gem?