我正在尝试在linux中执行:
command[0] = "~/test/bin/runScript_sh";
Runtime.getRuntime().exec(command);
但是得到一个异常 java.io.IOException: Cannot run program
error=2, No such file or directory
可能是因为它无法评估波浪号。
可以做什么?
我会自己更换。
if(path.s.substring(0,1).contains("~"))
path = path.replaceFirst("~",System.getProperty("user.home"));
这可以让你得到你想要的字符串。
当您在 shell 命令提示符下运行命令时,诸如~
扩展、引用处理、通配符、$variable 扩展、输入/输出重定向和管道等都由 shell 处理......在它要求操作系统运行之前适合您的程序。
当您使用 运行命令时Runtime.exec
,您有三个选择:
使用 exec 启动子 shell 来运行命令;例如
Runtime.getRuntime().exec("/bin/sh", "-c", "~/test/bin/runScript_sh");
在像这样的简单情况下,这可能是矫枉过正。但是,如果您尝试做更复杂的事情,那么子 shell 可以真正简化事情。
1 - 事实上,波浪线的完全兼容外壳的处理相当复杂。
您可以使用以下命令获取用户的主目录System.getProperty
:
command[0] = System.getProperty("user.home") + "/test/bin/runScript_sh";
诸如~
和之类的项目$HOME
是外壳扩展
您必须在程序中展开这些项目,然后替换它们(提示:从 os 属性中获取它们,请参阅此页面)