任何人都可以告诉我为什么这个bash脚本工作,如果我剪切和粘贴到terminal,但引发“server_prep.sh:7:语法错误:”(“意外”启动时使用$ 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。 这两者之间可能有一些小的语法差异。
尝试更改!#/bin/sh
到脚本顶部的!#/bin/bash
在sh / bash中分配variables时不能有空格。 它一定要是:
required_gems=( rake rails sqlite3-ruby )
无论如何,它不一定是一个数组,你可以这样做:
required_gems="fake rails sqlite3-ruby"
接着
for required_gem in ${required_gems}; do blah blah done
注意在$ {required_gems}周围没有“”
第三行到最后一行,应该是$required_gems
读$required_gem
?