web-dev-qa-db-ja.com

vagrantで変数をシェルスクリプトプロビジョナーに渡す

here のように、単純なシェルスクリプトを使用して、迷惑なセットアップ用のソフトウェアをプロビジョニングしています。

しかし、vagrantに渡されたコマンドライン引数を取得して外部シェルスクリプトに送信する方法を理解できません。 Googleはこれが機能として追加されたことを明らかにしましたが、それをカバーするドキュメントやそこにある例は見つかりません。

25
user1391445

あなたは正しいです。引数を渡す方法は、:argsパラメータを使用することです。

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

first argを囲む単一引用符は、渡される引数の一部としてスペースを含める場合にのみ必要です。つまり、上記のコードは、ターミナルで次のように入力することと同じです。

$ bootstrap.sh 'first arg' second

スクリプト内の$ 1は文字列「first arg」を参照し、$ 2は文字列「second」を参照します。

これに関するv2ドキュメントはここにあります: http://docs.vagrantup.com/v2/provisioning/Shell.html

30
Johann

実際、それは変数では機能しません!正しい構文は次のとおりです。

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

シェルのsetup.shで:

echo "### $1 - $2"

> ### 192.168.50.4 - my_server
8
Ivan

以下は、環境から変数を渡す別の方法です。

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

使用例:

TRACE=1 VERBOSE=1 vagrant up
3
kenorb

明示的な引数を追加するために、私はこれを正常に使用しました:

config.vm.provision "Shell", path: "provision.sh", :args => "--arg1 somearg --arg2 anotherarg"
2
ulrich

古いバージョンの ドキュメントページ で見つけた情報に基づいて自分の質問に答えます:

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

-@ user1391445

1
kenorb

新しいバージョンでは、配列を使用できます。

config.vm.provision :Shell, :path => "bootstrap.sh", :args:["first", "second"]

0
Karmadon