2016年1月27日水曜日

Vagrant で shell-provisioning する時に.bashrc が読み込まれない

shell provisionした際に、以下のエラーが出てrbenvやnvmやnpmが実行できなかった。

==> default: /tmp/vagrant-shell: line 21: rbenv: command not found

==> default: /tmp/vagrant-shell: line 62: nvm: command not found

==> default: /tmp/vagrant-shell: line 63: npm: command not found


原因は以下の記事で判明。

Vagrantでshell-provisioningする時のshell環境に関するメモ - Qiita


.bashrc の先頭に、コマンドライン(非interactive)の時に、読込を終了する様な記述があったため。

但し、上記の記事とは違い、.bashrcの先頭の記載は下記であった。

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

そのため元記事にあるような

こうしたら動いた。

# set interactive environmental-valiables

PS1='$ '

source ~/.bashrc

# Install ruby

rbenv install 2.1.1

rbenv global 2.1.1

ではうまく行かず。。


echo $-

を確認した結果ところ

hB

となっていたので、 shel provision の冒頭で

set -i

することで.bashrcが無事読み込まれるようになりました。

  config.vm.provision "shell", privileged: false, inline: <<-SHELL
    set -i
    source ~/.bashrc

(補足)

上記のやり方( set -i )が判明するまでは以下の様な七面倒臭いやり方でコマンド実行していた。。

sudo -H -u vagrant bash -i -c 'rbenv rehash'

sudo -H -u vagrant bash -i -c 'rbenv global 2.2.0'

0 件のコメント :

コメントを投稿