我可以获得Java Runtime.getRuntime()的真正完整执行命令.exec?

时间:2016-07-05 07:56:01

标签: java linux ansible

当我尝试使用带有{<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 ...

获取某些用户的命令行历史记录

1 个答案:

答案 0 :(得分:1)

您在第三个参数中添加了其他引号:

"'{\"filePath\":\"/path/to/file\"}'"

如果这样做,您就不会像在上面那样在shell中执行相同的命令。你实际上正在执行(在bash中):

ansible-playbook /path/to/playbook --extra-vars ''\''{"filePath":"/path/to/file"}'\'''

你不需要这里的单引号:因为你直接传递这些值,你不必担心引用你必须做的事情在一个壳里。你可以简单地使用:

"{\"filePath\":\"/path/to/file\"}"