[英]Executing bash script with tilde in path
我正在尝试在Linux中执行:
command[0] = "~/test/bin/runScript_sh";
Runtime.getRuntime().exec(command);
但是出现异常java.io.IOException:无法运行程序
错误= 2,没有这样的文件或目录
可能是因为它无法评估波浪号。
该怎么办?
我自己替换它。
if(path.s.substring(0,1).contains("~"))
path = path.replaceFirst("~",System.getProperty("user.home"));
哪个会得到您想要的字符串。
您可以使用System.getProperty
获取用户的主目录:
command[0] = System.getProperty("user.home") + "/test/bin/runScript_sh";
当您在shell命令提示符下运行命令时,诸如~
扩展,报价处理,通配符,$ variable扩展,输入/输出重定向以及管道和子程序之类的操作都由shell处理……在它要求操作系统执行以下操作之前为您运行程序。
使用Runtime.exec
运行命令时,有三个选择:
使用exec启动子外壳以运行命令; 例如
Runtime.getRuntime().exec("/bin/sh", "-c", "~/test/bin/runScript_sh");
在像这样的简单情况下,这可能是过大的杀伤力。 但是,如果您尝试做更复杂的事情,那么子shell确实可以简化事情。
1-实际上,与波浪线完全兼容的外壳处理相当复杂。
~
和$HOME
是shell扩展
您必须在程序中扩展这些项目,然后替换它们(提示:从os属性中获取它们,请参阅此页面)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.