Próba napisania skryptu powłoki w celu ustawienia środowiska serwera na systemie Ubuntu poprzez Vagrant i pojawia się problem, w którym skrypt kończy się nieoczekiwanie. Dodałem ścieżkę do skryptu powłoki w opcji konfiguracji dostarczania Vagrant.Konfigurowanie skryptu powłoki dla konfiguracji Vagrant
Vagrant:
# Specify our provision script
config.vm.provision "shell", path: "scripts/bootstrap.sh"
Mój skrypt:
#!/bin/bash
# Install dependencies for Ruby
sudo apt-get update
sudo apt-get install -y git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common
# Setting up rbenv
echo 'Setting up rbenv'
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
Po uruchomieniu, spodziewam repozytorium zostać sklonowany do folderu .rbenv i mieć rbenv dodany do $ PATH w pliku ~ /. bashrc wraz z funkcją init rbenv ocenianą i umieszczoną w ~/.bashrc. Jednakże, gdy skrypt zostanie wykonany na etapie dostarczania Vagrant, kończę skryptem tylko klonującym repozytorium git, a następnie kończącym bez wykonywania czegokolwiek w moim skrypcie.
wyjściowa:
==> default: Processing triggers for libc-bin (2.19-0ubuntu6) ...
==> default: Setting up rbenv
==> default: Cloning into '.rbenv'...
A potem skrypt kończy i ~/.bashrc pozostało niezmienione. Zastanawiam się, w jaki sposób mogę zmienić skrypt powłoki tak, aby wykonywał żądaną akcję (która dodaje rbenv do ~/.bashrc). Jakieś pomysły?
Czy skrypt został wykonany w kontekście _prądowego użytkownika_? Czy to możliwe, że '~' wskazuje gdzie indziej, gdy skrypt działa? Aby debugować, dodaj do skryptu i przechwytuj jego wyjściowe _stderr_: 'PS4 = '> $ LINENO:'; ustaw -xv' – mklement0