是否可以通过shell脚本向vagrant ssh发送多个命令?

时间:2015-09-25 17:24:45

标签: bash shell ssh vagrant

我在使用Git Bash运行.sh文件的Windows主机上。

我当前的项目有4个组件。要在localhost上启动它,我必须:

  1. webdriver-manager start因为我是QA而且还需要运行
  2. 在项目的父文件夹中
  3. vagrant up,然后关闭该窗口(或者通过VirtualBox UI自己启动VM)
  4. vagrant ssh cd /vagrant cd "component's folder" docker-compose up x 4
  5. grunt serve
  6. 现在,我有一个.sh文件,分别为1,2和4,但我找不到如何将多个命令传递给vagrant ssh,特别是因为docker-compose up需要不断运行

    有没有办法传递那些cd和docker-compose?

    我发现the ssh documentation from vagrant提到需要做一些花哨的事情才能让它运行后台进程,但我不知道它在做什么或如何在.sh中实现它文件,因为措辞是如此愚蠢。

    另外,我一般都是shell脚本的新手,所以如果有更聪明的方法来解决这个问题,我也会很感激。这些脚本不是必需的,当我在本地运行测试时,我不想每天都重复输入它。

2 个答案:

答案 0 :(得分:4)

从您的Vagrant文​​件中获取类似内容

$script = <<SCRIPT
echo "running script in the VM"
cd /vagrant
cd "component's folder"
docker-compose up
cd "component's folder 2"
docker-compose up
# and add all other commands you would run from the VM
SCRIPT

Vagrant.configure(2) do |config|
  ....
  config.vm.provision "shell", inline: $script
  ....
end

注意:这将以sudo(来自您的VM)运行命令,如果您想将它们作为您的流浪者用户运行,只需执行

config.vm.provision "shell", inline: $script, privileged: "false"

答案 1 :(得分:3)

如果需要在¬x·¬y·z + ¬x·y·z + x·y·z + x·y·¬z + x·¬y·¬z ¬x·(¬y·z + y·z) + x·(y·z + y·¬z + ¬y·¬z) //distributivity ¬x·(z·(¬y + y)) + x·(y·(z + ¬z) + ¬y·¬z)) //distributivity ¬x·(z·( 1 )) + x·(y·( 1 ) + ¬y·¬z)) //complementation ¬x·(z ) + x·(y + ¬y·¬z)) //identity for · ¬x·(z ) + x·(y + y·¬z + ¬y·¬z)) //absorption ¬x·(z ) + x·(y + ¬z·(y + ¬y)) //distributivity ¬x·(z ) + x·(y + ¬z·( 1 )) //complementation ¬x·(z ) + x·(y + ¬z) //identity for · ¬x·z + x·y + x·¬z //distributivity ¬x·z + x·y + x·¬z //minimal DNF ¬x·z + x·y + x·¬z ¬x·z + x·(y + ¬z) //distributivity (¬x + x)·(¬x + (y + ¬z))·(z + x)·(z + (y + ¬z)) //distributivity ( 1 )·(¬x + y + ¬z )·(z + x)·(z + y + ¬z) //complementation ( 1 )·(¬x + y + ¬z )·(z + x)·(y + 1) //complementation ( 1 )·(¬x + y + ¬z )·(z + x)·(1) //annihilator for + (¬x + y + ¬z )·(z + x) //identity for · (¬x + y + ¬z)·(x + z) //minimal CNF 上调用命令,您可以通过以下方式在主机上提供provisioning script

vagrant up

所以Vagrant会将此脚本上传到访客并执行它(使用URL而不是路径也可以),

或者,您可以使用内联shell语法:

config.vm.provision "shell", path: '/vagrant/scripts/provision.sh'

或者在VM中运行脚本,然后尝试:

config.vm.provision "shell", inline: "echo Hello, World"

要在VM中运行一次性关闭命令,您可以使用config.vm.provision "shell", inline: %Q(/usr/bin/env VAR=1 bash /vagrant/script.sh) 命令,例如:

vagrant ssh