回答:
役立つはずの少なくとも2つのプラグイン:
スクリプトが(ほぼ)すべてのvagrantコマンドで実行されることを気にしない場合は、Vagrantfileでシェルアウト(またはルビの魔法を使用)することもできます。
system('./myscript.sh')
Vagrant.configure('2') do |config|
  # ...
end
(受け入れられた答えはユーザーがvagrant upを使用しているかどうかをチェックしないため、完了と言います。したがって、スクリプトは各コマンドで実行されますが、OPはそれを望みません。)
ただし、これには簡単な解決策があります。
ARGV[0]コマンドの最初の引数が入力されたとすることができているup、down、status、など。単にの値をチェックしARGV[0]、あなたのVagrantfileに。
次のようなことができます:
system("
    if [ #{ARGV[0]} = 'up' ]; then
        echo 'You are doing vagrant up and can execute your script'
        ./myscript.sh
    fi
")
Vagrant.configure('2') do |config|
  # ...
end
これをVagrantfileの上部近くに配置します。
module LocalCommand
    class Config < Vagrant.plugin("2", :config)
        attr_accessor :command
    end
    class Plugin < Vagrant.plugin("2")
        name "local_shell"
        config(:local_shell, :provisioner) do
            Config
        end
        provisioner(:local_shell) do
            Provisioner
        end
    end
    class Provisioner < Vagrant.plugin("2", :provisioner)
        def provision
            result = system "#{config.command}"
        end
    end
end
次に、Vagrantfileで次のように呼び出します。
config.vm.provision "list-files", type: "local_shell", command: "ls"
そして、このようなコマンドラインを介して:
vagrant provision --provision-with list-files
プラグインのように見えるため、これは一種のハックですが、実際にはそうではありません(実行すると表示されませんvagrant plugin list)。プラグインをインストールする必要がないという利点があることを除いて、この方法で行うことはお勧めしません。したがって、Vagrantfileは、最新の構成バージョン(これを書いている時点ではバージョン2)をサポートするすべてのマシンで動作します。移植性は有望に思えますが、発行している実際のコマンドのクロスプラットフォーム全体の問題もあります。Vagrantfileを移植可能にする場合は、考慮する必要がありますが、これで開始できます。
@tmatilaiの回答に基づきますが、2019年に更新されたvagrant-triggersはVagrantに統合されました。そのため、次のようなことができます。
node.trigger.before [:up, :provision] do |trigger|
  trigger.info = "Running ./myscript.sh locally..."
  trigger.run = {path: "./myscript.sh"}
end
このブロックはの中に入りconfig.vm.defineます。その他のドキュメント:https : //www.vagrantup.com/docs/triggers/
config.vm.defineは必須ではありません。内部に配置することもできますVagrant.configure("2") do |config| ... end。最後の注意点として、Windowsホストでは、Vagrantは.ps1拡張子を持つPowershellスクリプトも喜んで実行します。
                    @tmatilaiが使用について言ったことに沿って
system('./myscript.sh')
vagrantコマンドのインストールや、システムにインストールされていないプロビジョナーのインストールなど、1回限りのコマンドには非常に役立ちました。vagrantコマンドを呼び出すたびに再実行されるのを避けるために、sedを追加してを自動コメントしVagrantfileます。
例えば:
system('vagrant plugin install vagrant-fabric && (pip install fabric jinja2 || sudo pip install fabric jinja2) && sed -i -e "s/^system/#system/g" Vagrantfile')
そして、それをVagrantfileの最初の行にします。それは最初の放浪ファブリックプラグイン、ファブリックや神社をインストールします。この方法で(せずに最初の試みますsudoためvirtualenvsとしてsudoいるが失敗した場合)して、行のコメントそのもの。
if [[ $(vagrant plugin list | grep -c vagrant-host-shell) == "0" ]] then vagrant plugin install vagrant-host-shell fi
                    vagrant status前にvagrant up...