在vagrant启动后运行其余的批处理命令

时间:2016-07-23 10:00:19

标签: shell batch-file command-line vagrant

1)你好我想创建一个脚本来运行一个脚本从不同的目录启动vagrant,当我登录到它时,我想在vagrant中启动一些命令,是否可能?

script.bat

call ng build
call node copy.js
cd \b\
vagrant up
vagrant ssh
cd /
sudo /etc/init.d/httpd start
sudo /etc/init.d/postgresql start
java -jar /opt/app/app-0.0.1-SNAPSHOT.jar

现在它在我使用vagrant ssh登录到vagrant之后停止了。 另外: 2)你也知道我从退出流浪者后可以用来留在我的目录中的命令。我最初从目录C:/ a运行此脚本,我想在C:/ b文件夹中运行这些命令,并希望在退出后保留在C:/ a中。 我尝试了pushd和popd但没有效果。

3)当我从流浪汉出来但它还没有出现时,是否可以不让流浪汉出现?

2 个答案:

答案 0 :(得分:2)

你可以

  1. 执行vagrant shell provisioning可以一直运行,所以添加类似于Vagrantfile的内容

      config.vm.provision "shell", privileged: false, run: "always", inline: <<-SHELL
        sudo /etc/init.d/httpd start
        sudo /etc/init.d/postgresql start
        java -jar /opt/app/app-0.0.1-SNAPSHOT.jar
      SHELL
    
  2. 这样每次运行vagrant up

    时都会运行这些命令
    1. 从script.bat文件运行来自vagrant ssh的命令,类似于

      call ng build
      call node copy.js
      cd \b\
      vagrant up
      vagrant ssh -c "sudo /etc/init.d/httpd start"
      vagrant ssh -c "sudo /etc/init.d/postgresql start"
      vagrant ssh -c "java -jar /opt/app/app-0.0.1-SNAPSHOT.jar"
      
    2. 至第二点

        

      你也知道我从退出流浪者后可以用来留在我的目录中的命令。我最初从目录C:/ a运行此脚本,我想在C:/ b文件夹中运行这些命令,并希望在退出后保留在C:/ a中

      vagrant将返回它正在运行的当前目录。

      让我们说你从c:/ a你的脚本运行,你的脚本中你运行到c:/ b,当你从vagrant退出时,它将从c:/ b返回。如果要退出并返回到c:/ a,请确保在执行vagrant命令之前启动cd c:/a

        

      3)当我从流浪汉出来但它还没有出现时,是否可以不让流浪汉出现?

      不清楚 - vagrant up意味着您启动虚拟机并且它正在运行 - 在此之后您可以通过ssh进入虚拟机,但此时您退出虚拟机,虚拟机仍在启动并运行直到您流浪汉停止。

      您可能会对vagrant的运行方式以及它在脚本中的运行方式感到困惑。确保你熟悉vagrant运行的方式,然后你可以编写脚本。

答案 1 :(得分:0)

使用pushdpopd 然后存储当前目录以供POPD命令使用 更改指定的目录。

PUSHD [路径| ..]

path指定生成当前目录的目录。

如果启用了Command Extensions,则PUSHD命令接受 网络路径以及正常的驱动器号和路径。 如果指定了网络路径,PUSHD将创建一个临时路径 指向该指定网络资源的驱动器号 然后使用新的更改当前驱动器和目录 定义的驱动器号。临时驱动器号分配自 Z:关闭,使用找到的第一个未使用的驱动器号。