繁体   English   中英

在路径中使用波浪号执行bash脚本

[英]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运行命令时,有三个选择:

  • 编写没有任何外壳“笨拙的东西”的命令
  • 复制外壳将在Java中执行的操作; 例如,用适当的东西替换前导波浪号1 ,或者
  • 使用exec启动子外壳以运行命令; 例如

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

    在像这样的简单情况下,这可能是过大的杀伤力。 但是,如果您尝试做更复杂的事情,那么子shell确实可以简化事情。


1-实际上,与波浪线完全兼容的外壳处理相当复杂。

~$HOME是shell扩展

您必须在程序中扩展这些项目,然后替换它们(提示:从os属性中获取它们,请参阅页面)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM