У меня есть следующий скрипт, который отлично работает до конца скрипта, где строка для установки 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 для ввода пароля? Во-вторых, как заканчивается "install.sh"? Это может сделать выход; поскольку он работает в той же оболочке, это приведет к выходу из оболочки. Чтобы этого не произошло, вы можете запустить его во вторичной оболочке, обычно это делается с помощью чего-то вроде sh ./install.sh
.