Java执行shell
最近解锁了新技能,mark一下。
海豚调度器里面可以执行shell/python等脚本,但是这调度器本身是Java开发的,Java和Shell执行引擎是怎么交互的?翻了一下代码~
Java其实已经提供了相应的Process
类和相应的API
,使用者直接调用API
即可。
下面是一个Demo:
ShellExecutor.java
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* @Description
* @Date 2021/9/12
* @Created by Jonathan
*/
public class ShellExecutor {
private static void run() throws Exception {
//Process process;
List<String> command = new LinkedList<>();
//init process builder
ProcessBuilder processBuilder = new ProcessBuilder();
// setting up a working directory
processBuilder.directory(new File("/opt/"));
// merge error information to standard output stream
processBuilder.redirectErrorStream(true);
// setting up user to run commands
command.add("sudo");
command.add("-u");
command.add("root");
command.add("sh");
//command.addAll(commandOptions());
command.add("/opt/test.sh");
// setting commands
processBuilder.command(command);
Process process = processBuilder.start();
// run 阻塞的
boolean waitFor = process.waitFor(10, TimeUnit.SECONDS);
System.out.println("status:" + waitFor);
List<String> logBuffer = new ArrayList<>();
BufferedReader inReader = null;
try {
inReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = inReader.readLine()) != null) {
logBuffer.add(line);
}
} catch (Exception e) {
System.out.println("error.");
}
System.out.println("logBuffer:" + logBuffer);
}
public static void main(String[] args) throws Exception {
System.out.println("start run shell");
run();
System.out.println("end run shell");
}
}
上面这个代码看起来也很直白,就是初始化了一个Process类,入参就是指定以什么用户身份去执行指定路径的shell脚本,在获取shell执行之后的运行结果。
test.sh
#!/bin/bash
time1=$(date);
echo $time1;
echo "hello world-2021-09-12";
结果如图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)