【问题标题】:IoException while running shell script file in Java在 Java 中运行 shell 脚本文件时出现 IoException
【发布时间】:2021-08-03 01:32:06
【问题描述】:

我需要在 java 中运行一个 shell 脚本。该脚本接受两个参数作为参数,第一个是名称,第二个是目录路径。

我在本地机器上使用 Windows 作为操作系统。

下面是我要运行的代码:

ProcessBuilder processBuilder = new ProcessBuilder("D:\\temp\\script\\create_script.sh", name, sourceDir);     
       try {
            Process process = processBuilder.start();
            StringBuilder output = new StringBuilder();
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(process.getInputStream()));

            String line;
            while ((line = reader.readLine()) != null) {
                output.append(line + "\n");
            }

            int exitVal = process.waitFor();
            if (exitVal == 0) {
                System.out.println("Success!");
                System.out.println(output);
                System.exit(0);
            } else {
                //abnormal...
            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

上面的代码给出以下错误:

2021-05-12 22:08:47.383  INFO 10600 --- [nio-8090-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
java.io.IOException: Cannot run program "D:\temp\script\create_script.sh": CreateProcess error=193, %1 is not a valid Win32 application
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)

有人可以帮我解决缺少的部分吗?

感谢您的所有帮助!提前致谢!

【问题讨论】:

标签: java spring


【解决方案1】:

如果您使用的是 Windows,问题可能是您正在尝试运行 Linux shell 脚本 (.sh),因此 Windows 并不真正理解这一点。 您可以将 Linux shell 脚本翻译成 Windows bash 脚本,或者尝试在 Linux 操作系统上再次运行您的程序,我推荐后者。

【讨论】:

  • 非常感谢您的回复。但是,当我使用命令提示符手动运行脚本时,它会执行脚本。我很想知道将其转换为 windows bash 脚本的需要。
【解决方案2】:

下面的代码对我有用!

ProcessBuilder processBuilder = new ProcessBuilder();
        processBuilder.command("cmd.exe", "/c", "D:\\temp\\script\\create_script.sh);
        try {
            Process process = processBuilder.start();
            StringBuilder output = new StringBuilder();
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(process.getInputStream()));

            String line;
            while ((line = reader.readLine()) != null) {
                output.append(line + "\n");
            }

            int exitVal = process.waitFor();
            if (exitVal == 0) {
                System.out.println("Success!");
                System.out.println(output);
                System.exit(0);
            } else {
                //abnormal...
            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2021-12-29
    • 2018-08-10
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多