2015-05-08 22 views
1

使用ssh子命令运行命令或用简单的测试脚本行,像-e,在vagrant工作正常(如如何在流浪汉测试中使用命令运行bash脚本?

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等创建的任何类型的脚本中的故障将从bash相同丧失工作能力受到以提供可用的串报价/完全可以使用)

有没有什么办法可以在vagrant框内的测试中用复杂语句执行脚本代码?我是否真的需要通过本地主机接口(使用FTP或类似的)传输脚本?

回答

0

随着How to use SSH to run a shell script on a remote machine?有可能认识到使用连接

ssh -p [port] -i [keyfile] [email protected] 'bash -s' < script.sh 

(与[port][keyfile]vagrant ssh-config检索),然后放在script.sh脚本代码无业游民。

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