2013-03-17 18 views
20

Korzystam z prostego skryptu powłoki, aby udostępnić oprogramowanie dla konfiguracji włóczęgi, jak widać here.Przekazywanie zmiennej do narzędzia skryptowego powłoki w przełączniku

Nie można jednak znaleźć sposobu na przekazanie argumentów wiersza poleceń do narzędzia Vagrant i wysłanie ich do zewnętrznego skryptu powłoki. Google ujawnia, że ​​został dodany jako funkcja, ale nie mogę znaleźć żadnej dokumentacji obejmującej go lub przykłady tam.

Odpowiedz

24

Masz rację. Sposób przekazywania argumentów jest zgodny z parametrem :args.

config.vm.provision :shell, :path => "bootstrap.sh", :args => "'first arg' second" 

Uwaga że pojedyncze cudzysłowy wokół first arg są potrzebne tylko jeśli chcesz zawierać spacji jako część argumentu przekazanego. Oznacza to, że powyższy kod jest równoważne, wpisując w terminalu:

$ bootstrap.sh 'first arg' second 

Jeżeli w skrypcie $ 1 odnosi się do strun „pierwszej arg” i $ 2 odnosi się do napisu „drugiego”.

Docs v2 na ten temat można znaleźć tutaj: http://docs.vagrantup.com/v2/provisioning/shell.html

+0

I nie sądzę, że to działa, gdy arg jest zmienną w twoim pliku vagrantfile. Na przykład: - args: "# {MY_VARIABLE}" i skrypt .sh: - echo 1 – Justin

+0

Czy istnieje sposób przekazywania argumentów takich jak 'vagrant provision --arg1 --arg2'? A następnie dostęp do tych w naszym skrypcie świadczenia. Mam prawie 99% pewności, że odpowiedź brzmi nie, ale wciąż nie mogę powstrzymać się od pytania. –

6

Rzeczywiście, to nie działa ze zmiennymi! Prawidłowe snytax jest:

var1= "192.168.50.4" 
var2 = "my_server" 
config.vm.provision :shell, :path => 'setup.sh', :args => [var1, var2] 

a następnie w setup.sh powłoki:

echo "### $1 - $2" 

> ### 192.168.50.4 - my_server 
1

Odpowiadając na moje własne pytanie na podstawie jakiejś informacji znalazłem w starej wersji docs page:

config.vm.provision :shell, :path => "bootstrap.sh", :args => "'abc'" 

- @ user1391445

1

Oto alternatywny sposób przekazywania zmiennych ze środowiska:

config.vm.provision "shell" do |s| 
    s.binary = true # Replace Windows line endings with Unix line endings. 
    s.inline = %Q(/usr/bin/env \ 
     TRACE=#{ENV['TRACE']}  \ 
     VERBOSE=#{ENV['VERBOSE']} \ 
     FORCE=#{ENV['FORCE']}  \ 
     bash my_script.sh) 
end 

Przykład wykorzystania:

TRACE=1 VERBOSE=1 vagrant up 
0

Przez dodanie wyraźnych argumentów, kiedyś to z powodzeniem:

config.vm.provision "shell", path: "provision.sh", :args => "--arg1 somearg --arg2 anotherarg" 
Powiązane problemy