java.io.IOException:无法运行程序"&引用;:CreateProcess错误=2,系统找不到指定的文件

java.io.IOException:无法运行程序"&引用;:CreateProcess错误=2,系统找不到指定的文件,java,sh,processbuilder,Java,Sh,Processbuilder,我只是想在Eclipse中测试运行我的项目目录中的shell脚本 new ProcessBuilder("scripts/test.sh").start(); 获取此错误: java.io.IOException:无法运行程序“scripts/test.sh”:CreateProcess error=2,系统找不到指定的文件这可能有两个原因: Java执行system/exec C例程,该例程除了二进制代码之外test.sh不是二进制文件。您可能应该使用bash:bash-f script

我只是想在Eclipse中测试运行我的项目目录中的shell脚本

new ProcessBuilder("scripts/test.sh").start();

获取此错误:


java.io.IOException:无法运行程序“scripts/test.sh”:CreateProcess error=2,系统找不到指定的文件这可能有两个原因:

  • Java执行system/exec C例程,该例程除了二进制代码之外
    test.sh
    不是二进制文件。您可能应该使用bash:
    bash-f scripts/test.sh
    ->
    newprocessbuilder()(“bash”、“-f”、新文件(“scripts/test.sh”).getAbsoluteFile())
  • 文件
    scripts/test.sh
    不存在,表示当前目录不好

您可以尝试
System.out.println(新文件(“scripts/test.sh”).getAbsoluteFile())
来打印Java正在使用的路径。

这可能有两个原因:

  • Java执行system/exec C例程,该例程除了二进制代码之外
    test.sh
    不是二进制文件。您可能应该使用bash:
    bash-f scripts/test.sh
    ->
    newprocessbuilder()(“bash”、“-f”、新文件(“scripts/test.sh”).getAbsoluteFile())
  • 文件
    scripts/test.sh
    不存在,表示当前目录不好

您可以尝试
System.out.println(新文件(“scripts/test.sh”).getAbsoluteFile())
来打印Java使用的路径。

如果找不到文件,最好尝试记录当前工作目录……如果找不到文件,尝试记录当前工作目录将是一个好主意…在windows中尝试从Java应用程序运行bash脚本时,遇到了相同的错误。getAbsoluteFile()使JVM能够获取bash。显然,我以前安装Cygwin bash是为了在Windows中获得bash.exe文件的绝对路径;字符串scriptFile=新文件(cmd).getAbsoluteFile().getAbsolutePath();字符串testcaseNo=fileName.split(“\\”)[0];请尝试{String bashFile=PropertyFile.bashFile;ProcessBuilder ProcessBuilder=new ProcessBuilder(bashFile,“-f”,scriptFile+”“+arg0+”“+arg1);ProcessBuilder.redirectErrorStream(true);Process bashProcess=ProcessBuilder.start();bashProcess.waitFor();}catch(IOException | InterruptedException e){e.printStackTrace();}上面的代码对我有用。@NoDataFound所述的原因是Java在windows中试图从Java应用程序运行bash脚本时找不到bash文件,并得到相同的错误。getAbsoluteFile()使JVM能够获取bash。显然,我以前安装Cygwin bash是为了在Windows中获得bash.exe文件的绝对路径;字符串scriptFile=新文件(cmd).getAbsoluteFile().getAbsolutePath();字符串testcaseNo=fileName.split(“\\”)[0];请尝试{String bashFile=PropertyFile.bashFile;ProcessBuilder ProcessBuilder=new ProcessBuilder(bashFile,“-f”,scriptFile+”“+arg0+”“+arg1);ProcessBuilder.redirectErrorStream(true);Process bashProcess=ProcessBuilder.start();bashProcess.waitFor();}catch(IOException | InterruptedException e){e.printStackTrace();}上面的代码对我有用。@NoDataFound说明的原因是Java找不到bash文件