执行bash脚本与路径波浪(Executing bash script with tilde in

2019-10-17 18:38发布

我试图在Linux中执行:

command[0] = "~/test/bin/runScript_sh";
Runtime.getRuntime().exec(command);

但得到异常产生java.io.IOException:不能运行程序
误差= 2,没有这样的文件或目录

可能是因为它无法计算波浪。

可以做些什么?

Answer 1:

我将取代它自己。

if(path.s.substring(0,1).contains("~"))
    path = path.replaceFirst("~",System.getProperty("user.home"));

它得到你想要的字符串。



Answer 2:

您可以获取用户的主目录System.getProperty

command[0] = System.getProperty("user.home") + "/test/bin/runScript_sh";


Answer 3:

当你在shell命令提示符下运行的命令,之类的东西~扩张,报价处理,通配符,$变量扩展,输入/输出上都是由壳...处理重定向和管道和儿子,它要求操作系统之前运行您的程序(一个或多个)。

当您运行使用命令Runtime.exec ,你有三种选择:

  • 没有任何壳“时髦的东西”写命令
  • 复制什么壳会在Java中做的; 例如,用适当的东西1更换导致波浪线,或
  • 使用exec来启动子shell来运行命令; 例如

     Runtime.getRuntime().exec("/bin/sh", "-c", "~/test/bin/runScript_sh"); 

    这是一个简单的情况下,这样可能矫枉过正。 但是,如果你正在尝试做更复杂的东西,然后一个孩子壳牌确能简化的东西。


1 -事实上波浪号完全兼容外壳交接是相当复杂的。



Answer 4:

项目如~$HOME是shell扩展

你必须扩大你的程序这些项目,然后替换它们(提示:从操作系统性能得到他们,看到此页)



文章来源: Executing bash script with tilde in path