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



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

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成语的失败意味着用vagrant创建的任何类型的脚本的失败(pythongroovy等将遭受同样的bash无法提供可用的字符串引用/根本可用)

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

了解如何使用 SSH 在远程计算机上运行 shell 脚本? 可以使用以下方法连接到流浪者

ssh -p [port] -i [keyfile] vagrant@localhost 'bash -s' < script.sh

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

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

最新更新