java创建shell脚本

package com.xxl.job.core.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

/**
 * <p>
 * <code>GenerateShellScript</code>
 * </p>
 * Description:
 *
 * @author Jalen
 * @date 2020-01-17 03:31 PM
 */
public class GenerateShellScript {

    private static void createShell(String path, String... strings) throws Exception {
        if (strings == null) {
            System.out.println("strings is null");
            return;
        }
        File sh = new File(path);
        boolean createResult = sh.createNewFile();
        if (!createResult){
            System.out.println("create failed");
        }
        boolean executeResult = sh.setExecutable(true);
        if (!executeResult){
            System.out.println("execute failed");
        }
        FileWriter fw = new FileWriter(sh);
        BufferedWriter bf = new BufferedWriter(fw);

        for (int i = 0; i < strings.length; i++) {
            bf.write(strings[i]);
            if (i < strings.length - 1) {
                bf.newLine();
            }
        }
        bf.flush();
        bf.close();
    }

    private static void checkAndCreate(String jobName){
        File file = new File("D:\\idea\\workspace\\xxl-job-oracle\\xxl-job-core\\src\\main\\java\\com\\xxl\\job\\core\\util\\" + jobName + ".sh");
        if (!file.exists()){
            String command1 = "#!/bin/bash";
            String command2 = "source /opt/xxx/spoc.cfg";
            String command3 = "/opt/venv/bin/python /opt/xxx/xxx/jobs/xxxx.py" +
                    " " + "'" + jobName + "'";
            String command4 = "echo \"End!\"";
            String path = "D:\\idea\\workspace\\xxl-job-oracle\\xxl-job-core\\src\\main\\java\\com\\xxl\\job\\core\\util\\" + jobName + ".sh";
            String[] strings = {command1, command2, command3, command4};
            try {
                createShell(path, strings);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else {
            System.out.println("File exist");
        }

    }

    public static void main(String[] args) {
        String jobName = "Exception Sites for xxxx";
        checkAndCreate(jobName);
    }
}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 可以使用 `ProcessBuilder` 或 `Runtime` 类来调用 Shell 脚本。 1. 使用 `ProcessBuilder` ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class RunShellScript { public static void main(String[] args) { try { ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/path/to/script.sh", "arg1", "arg2"); pb.redirectErrorStream(true); Process process = pb.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } int exitCode = process.waitFor(); System.out.println("脚本执行完毕,退出码为:" + exitCode); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 以上代码中,我们使用 `ProcessBuilder` 创建一个进程并执行 Shell 脚本。其中,`/bin/bash` 是 Shell 的路径,`/path/to/script.sh` 是脚本的路径,`arg1` 和 `arg2` 是传递给脚本的参数。`redirectErrorStream(true)` 是将标准错误输出流合并到标准输出流中,以便我们可以同时处理输出信息和错误信息。最后,我们使用 `process.waitFor()` 等待进程执行完毕,并获取进程的退出码。 2. 使用 `Runtime` ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class RunShellScript { public static void main(String[] args) { try { Process process = Runtime.getRuntime().exec("/bin/bash /path/to/script.sh arg1 arg2"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } int exitCode = process.waitFor(); System.out.println("脚本执行完毕,退出码为:" + exitCode); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 以上代码中,我们使用 `Runtime.getRuntime().exec()` 创建一个进程并执行 Shell 脚本。其中,`/bin/bash /path/to/script.sh arg1 arg2` 是要执行的命令。其余部分和 `ProcessBuilder` 的代码相同。 使用 `ProcessBuilder` 更加灵活,可以设置工作目录、环境变量等参数。而使用 `Runtime` 简单直接,适用于简单的脚本调用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值