複数のディレクトリにインストールされたBashスクリプト[閉じる]

複数のディレクトリにインストールされたBashスクリプト[閉じる]

rbenvを最初から最後までインストールするためにbashスクリプトを作成しようとしています。私は楽しくMacを使用します。

しかし、何か動作しません。主にディレクトリを変更していますが、サブシェルでのみ可能です。

#!/bin/bash
echo "installing rbenv ruby manager manager"
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 .bash_profile

echo "installing ruby build for rbenv"
git clone https://github.com/sstephenson/ruby-build.git
cd ruby-build
sudo ./install.sh

echo "rbenv and ruby-build have been installed, installing ruby now.."
sleep 2

read -p "would you like chronospere to install ruby 1.9.3 [y/n]" RESP
if [ "$RESP" = "y" ]; then
  rbenv install 1.9.3-p327
  rbenv rehash
  rbenv global 1.9.3-p327
  ruby -v
else
  echo "alrigt skipping.. vagrant has rbenv installed you can install ruby it at your leisure "
  echo "hold cmd, and double clck https://github.com/sstephenson/rbenv for more info"
fi

cd ~

だからインストールすると効果があるようです。しかし、ほとんどのコードが実行されていないか、目的の場所で実行されません。

vagrant@precise64:/vagrant$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
vagrant@precise64:/vagrant$ rbenv
The program 'rbenv' is currently not installed.  You can install it by typing:
sudo apt-get install rbenv

ご覧のとおり、何もインストールされていないようです。source .bash_profile一度も起こらなかったこと

vagrant@precise64:/vagrant$ cd      
vagrant@precise64:~$ cd ~ 
vagrant@precise64:~$ source .bash_profile 

bash_profileを手動で取得した後、

vagrant@precise64:~$ rbenv
rbenv 0.4.0-45-g060f141
vagrant@precise64:~$ rbenv versions
  * system (set by /home/vagrant/.rbenv/version)
  1.9.3-p327
vagrant@precise64:~$ rbenv global 1.9.3-p327
vagrant@precise64:~$ ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux]

ご覧のとおり、コードは実行中のように見えますが、あるディレクトリから次のディレクトリに移動しません。 bashスクリプトでこれが可能かどうかはわかりません。私はから~ / (HOME)戻っ/ruby-buildた後~に移動します/vagrant。単一のbashスクリプトでこれを達成できますか?端末を開き、コードを1行ずつ実行すると100%動作するため、これは奇妙です。

ベストアンサー1

最も直接的な理由は@l0b0が言及したことです。PATH変数を更新する必要があります。現在のシェルではsource .bash_profile(または)を使用して. .bash_profileこれを行うことができます。スクリプトを介してシェルの初期化ファイルを更新した後、生成された他のシェルは「即時」動作します(更新された初期化ファイルを使用するため)。

つまり、近いうちにひどい混乱に直面しない限り、おそらく仕事を少し整理したいのです。私が見た主な問題は次のとおりです。

  1. 可能であれば、いくつかのパッケージ管理を使用してください。 Macユーザーなら、確認したいかもしれません。関連質問スーパーユーザーSEで。パッケージ管理を使用しないことは通常悪い習慣です(この規則には例外がありますが)。

  2. 仕事は保証されますかsudo ...?ホームディレクトリにあると仮定するとrbenv、必ずルートディレクトリにインストールする必要がありますか?これは以前のポイントに関連しています。

  3. 大丈夫かもしれませんが、~/.rbenv/bin一般的に一般的な効果を模倣する方が良いです。FHS自分のディレクトリに(などを直接ディレクトリに入れるか、bin/etc/lib/サブディレクトリに入れる)

  4. set -e明示的にチェックされていないエラーが発生したときにスクリプトを中断するためにこれを使用できます。詳細については、help setまたはを参照してください。ここでは最初の候補です。リポジトリがすでに存在する場合、レプリケーションは失敗しますが、スクリプトはそれを自動的に受け入れます。man bashgit clone

  5. >> ~/.bash_profileシェルの初期化ファイルを汚染する可能性があります。これらの行が既に存在することを確認することは可能ですが、インストールが正しく機能するためには、この行を手動で追加する必要があることを示すメモを印刷することが実際にはより便利です。特に、スクリプトを他の人に与えることにした場合にはさらにそうです。

おすすめ記事