当我尝试使用带有{<1}的Java
运行 Ansible 时这是我做的:
Runtime.getRuntime().exec
我收到如下错误消息:
String[] cmd = {"ansible-playbook", "/path/to/playbook", "--extra-vars", "'{\"filePath\":\"/path/to/file\"}'"};
Process process = Runtime.getRuntime().exec(cmd, null);
但是当我用终端执行相同的命令时:
FAILED! => {"failed": true, "msg": "'filePath' is undefined"}
一切都很好......
我认为我在终端和Java中运行的命令之间肯定存在一些差异,可能是撇号或引号?
我想知道有没有办法获得ansible-playbook /path/to/playbook --extra-vars '{"filePath":"/path/to/file"}'
真正执行的命令?就像我可以通过Runtime.getRuntime().exec
...
答案 0 :(得分:1)
您在第三个参数中添加了其他引号:
"'{\"filePath\":\"/path/to/file\"}'"
如果这样做,您就不会像在上面那样在shell中执行相同的命令。你实际上正在执行(在bash中):
ansible-playbook /path/to/playbook --extra-vars ''\''{"filePath":"/path/to/file"}'\'''
你不需要这里的单引号:因为你直接传递这些值,你不必担心引用你必须做的事情在一个壳里。你可以简单地使用:
"{\"filePath\":\"/path/to/file\"}"