gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:59 26 4
gpt4 key购买 nike

当我尝试使用 Java 运行 AnsibleRuntime.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"}

但是当我用终端执行同样的命令时:

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

一切都很好......

我认为我在终端和 Java 中运行的命令之间一定存在一些差异,可能是撇号或引号?

我想知道有什么方法可以获取Runtime.getRuntime().exec 真正执行的命令吗?就像我可以通过 history... 获取某些用户的命令行历史一样......

最佳答案

您要在第三个参数中添加额外的引号:

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

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

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

此处的值不需要用单引号引起来:因为您是直接传递这些值,所以不必担心必须在 shell 中使用的引号。您可以简单地使用:

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

关于java - 我可以获得 Java Runtime.getRuntime().exec 的真正完整执行命令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38198079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com