我正在使用簡單的shell腳本爲流浪設置供應軟件,如here所示。將變量傳遞給流浪腳本中的shell腳本供應商
但是無法想出一種方法將命令行參數傳遞給vagrant並將它們發送到外部shell腳本。谷歌透露,這是作爲一個功能添加,但我找不到任何文件覆蓋它或在那裏的例子。
我正在使用簡單的shell腳本爲流浪設置供應軟件,如here所示。將變量傳遞給流浪腳本中的shell腳本供應商
但是無法想出一種方法將命令行參數傳遞給vagrant並將它們發送到外部shell腳本。谷歌透露,這是作爲一個功能添加,但我找不到任何文件覆蓋它或在那裏的例子。
你是對的。傳遞參數的方法是使用:args
參數。
config.vm.provision :shell, :path => "bootstrap.sh", :args => "'first arg' second"
注意周圍first arg
單引號,如果你想包括空格作爲傳遞的參數的一部分時,才需要。也就是說,上面的代碼等同於輸入在終端執行以下操作:
$ bootstrap.sh 'first arg' second
凡腳本$ 1指的是字符串「第一個參數」和$ 2指的是字符串「第二」之內。
在這第2版文檔可以在這裏找到:http://docs.vagrantup.com/v2/provisioning/shell.html
事實上,它不使用變量! 正確snytax是:
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
基於一些信息,我在舊版本的docs page的發現回答我的問題:
config.vm.provision :shell, :path => "bootstrap.sh", :args => "'abc'"
- @ user1391445
這裏是另一種方式
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
對於加入明確的論點,我用這個成功:
config.vm.provision "shell", path: "provision.sh", :args => "--arg1 somearg --arg2 anotherarg"
我不認爲這個工程的時候arg是你的vagrant文件中的一個變量。例如: - args:「#{MY_VARIABLE}」並在您的.sh腳本中: - echo $ 1 – Justin 2014-06-13 19:21:24
有沒有辦法傳遞像'vagrant provision --arg1 --arg2'這樣的參數?然後訪問我們的供應腳本中的那些。我幾乎99%肯定答案是否定的,但仍然無法阻止我自問。 – 2016-12-22 18:11:13