java运行时。运行shell脚本的exec无法打开文件
我正在使用运行时。getRuntime()。exec()从java代码运行shell脚本
String[] cmd = {"sh", "build.sh", "/Path/to my/sh file"};
try{
Process proc = Runtime.getRuntime().exec( cmd );
}
catch(Exception e){
System.out.println("Exception is:"+e);
}
它在控制台中提供以下输出:
sh: Can't open build.sh
我是不是走错了路?不明白为什么会发生这种事
编辑
根据这里的评论,我将String[] cmd = {"sh", "build.sh", "/Path/to my/sh file"};
修改为String[] cmd = {"sh", "/Path/to my/sh file/build.sh", "/Path/to my/sh file"};
。现在的问题是这个脚本需要从一个特定的路径执行。在命令提示符下执行此脚本时,首先将目录更改为该路径并执行它。我应该如何修改此代码
# 1 楼答案
使用
ProcessBuilder
并将进程的工作目录设置为脚本实际所在的目录:见^{} javadoc 。它包含了一个你能做什么的例子
Runtime.exec()
是过去式:p# 2 楼答案
问题是“sh”命令无法将相对路径
"build.sh"
解析为绝对路径。最可能的解释是"build.sh"
在启动命令时不在当前目录中假设
"/Path/to my/sh file"
字符串是"build.sh"
文件的路径,您需要像这样运行它:(..或使用
ProcessBuilder
的等效物)另一方面,如果
"/Path/to my/sh file"
字符串应该是"build.sh"
脚本的参数,那么您需要这样运行它:@fge的回答给出了另一种方法。在启动子进程之前,他正在设置子进程的当前目录。这是你的更新的问题的正确解决方案
# 3 楼答案
试试这个:
最好使用ProcessBuilder
# 4 楼答案
sh
找不到build.sh
脚本。要解决这个问题,可以提供build.sh
的完整路径