我有下面的脚本,它工作正常,直到安装JRuby 1.7.0.RC2行的脚本结束,但脚本停止。
我添加了$? 在脚本的最后尝试让它输出上一行的退出代码,但错误代码不会被打印。
#!/bin/bash # Update OS sudo apt-get -y update sudo apt-get -y upgrade # Install package dependencies sudo apt-get -y install git-core curl make g++ openjdk-6-jre-headless ant openjdk-6-jdk redis-server # Install rbenv cd ~ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(rbenv init -)"' >> ~/.bash_profile source ~/.bashrc source ~/.bash_profile # Install ruby-build: cd ~ git clone git://github.com/sstephenson/ruby-build.git cd ruby-build sudo ./install.sh # Install JRuby 1.7.0.RC2 echo 'install_package "jruby-1.7.0.RC2" "http://jruby.org.s3.amazonaws.com/downloads/1.7.0.RC2/jruby-bin-1.7.0.RC2.tar.gz" jruby' > jruby-1.7.0-rc2 ~/.rbenv/bin/rbenv install jruby-1.7.0-rc2 $? # /\ That last line never gets run # \/ I excluded the rest of script, as the problem seems to be right here ...
如果我手动运行JRuby安装命令(将其复制/粘贴到控制台中),则退出代码为0 ,所以我希望脚本可以不中断。
JRuby安装命令成功还是失败对脚本无关紧要,因为它不检查返回代码以应用任何逻辑。
我的猜测是,问题是与以前的命令。 首先,你有sudo提示input密码吗? 其次,“install.sh”如何结束? 它可能会退出; 因为它在同一个shell中运行,那会导致你的shell退出。 为了防止这种情况的发生,你需要在二级shell中运行它,通常通过sh ./install.sh类的东西来完成。