如何在vagrant的测试中使用命令运行bash脚本?

时间:2015-05-08 08:12:25

标签: python linux bash vagrant

使用-e子命令在vagrant中使用ssh等简单测试运行命令或脚本行正常工作(例如

vagrant ssh -c 'if ! [ -e file.deb ] ; then wget http://a.b/file.deb; fi'

一旦涉及字符串比较和命令执行bash引用,复杂性立即上升到天空。我试过了

  • 逃避字符串,但这似乎并不起作用(逃避逃避逃逸的复杂性......在bash中是不可接受的)
  • 使用cat <<EOF > file [code]EOF惯用法将所有内容写入脚本文件,例如

    vagrant ssh -c 'cat <<EOF > fetch.sh \
    #!/bin/bash \
    if [ "$(md5sum file.deb | cut -d \" \" -f 1)" != "d757d51819f8f945ae7715b532ab8d2e" ] ; then wget http://a/b/file.deb; fi \
    EOF'
    vagrant ssh -c 'bash ./fetch.sh'
    

    导致./fetch.sh: line 1: syntax error near unexpected token `if'

  • cat EOF惯用语的失败意味着在vagrantpythongroovy等中创建的任何类型的脚本失败都会遭受同样的无能力{ {1}}提供可用的字符串引用/完全可用)

有没有办法在bash框内的测试中使用复杂语句执行脚本代码?我是否真的需要通过localhost接口(使用FTP或类似的东西)传输脚本?

1 个答案:

答案 0 :(得分:0)

了解How to use SSH to run a shell script on a remote machine?可以使用

连接到流浪汉
ssh -p [port] -i [keyfile] vagrant@localhost 'bash -s' < script.sh

(从[port]检索[keyfile]vagrant ssh-config)并将脚本代码放入script.sh

如果正在运行多个vagrant实例(每个实例都启动自己的SSH服务器),端口可能会更改,因此您可能需要解析vagrant ssh-config