我正在尝试在linux中执行:
command[0] = "~/test/bin/runScript_sh";
Runtime.getRuntime().exec(command);
但得到例外
java.io.IOException:无法运行程序
error = 2,没有这样的文件或目录
可能是因为它无法评估代字号。
可以做些什么?
答案 0 :(得分:4)
我会自己替换它。
if(path.s.substring(0,1).contains("~"))
path = path.replaceFirst("~",System.getProperty("user.home"));
它可以为您提供所需的字符串。
答案 1 :(得分:2)
您可以使用System.getProperty
获取用户的主目录:
command[0] = System.getProperty("user.home") + "/test/bin/runScript_sh";
答案 2 :(得分:2)
当您在shell命令提示符下运行命令时,~
扩展,引用处理,globbing,$ variable扩展,输入/输出重定向以及管道和子进程等操作都由shell处理...在它要求操作系统为您运行程序之前。
使用Runtime.exec
运行命令时,您有三种选择:
使用exec启动子shell来运行命令; e.g。
Runtime.getRuntime().exec("/bin/sh", "-c", "~/test/bin/runScript_sh");
在这样的简单案例中,这可能有点过头了。但是如果你想要做更复杂的事情,那么子shell可以真正简化事情。
1 - 事实上,完全与shell兼容的波形处理相当复杂。
答案 3 :(得分:1)
~
和$HOME
等项目是shell扩展
您必须在程序中展开这些项目然后替换它们(提示:从os属性中获取它们,请参阅this页面)