使用-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
惯用语的失败意味着在vagrant
(python
,groovy
等中创建的任何类型的脚本失败都会遭受同样的无能力{ {1}}提供可用的字符串引用/完全可用)有没有办法在bash
框内的测试中使用复杂语句执行脚本代码?我是否真的需要通过localhost接口(使用FTP或类似的东西)传输脚本?
答案 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
。