谁能告诉我,如果我将这个 bash 脚本剪切并粘贴到终端,但使用 $ sudo sh server_prep.sh 启动时抛出 "server_prep.sh: 7: Syntax error: "(" unexpected" ,为什么它会起作用?
#!/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} 周围没有“”
您的脚本在执行时使用的是 sh,而不是 bash。两者之间可能存在细微的语法差异。
尝试在脚本顶部更改
!#/bin/sh
为!#/bin/bash
倒数第三行,应该
$required_gems
读$required_gem
?