感谢我吧,什么都不说,直接上代码:
package utils; import java.io.*; public class ShellUtils { public static String convertStreamToStr(InputStream is) throws IOException { InputStreamReader isr = new InputStreamReader(is, "utf-8"); BufferedReader br = new BufferedReader(isr); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } return sb.toString(); } public static String run(String cmd) { String res = null; try { Process process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", cmd}, null, null); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); String line; while ((line = reader.readLine()) != null){ writer.write("aaaaa"); writer.newLine(); writer.flush(); res = convertStreamToStr(process.getInputStream()); } } catch (IOException e) { e.printStackTrace(); } return res; } }
#a.sh echo "正在安装" read -p "是否进行: > " choice echo $choice
import cn.hutool.core.io.FileUtil; import utils.ShellUtils; import java.io.File; public class Main { public static void main(String[] args) { File file = new File("script/a.sh"); String s = FileUtil.readUtf8String(file); String run = ShellUtils.run("/Users/happysmile/Documents/code/demo/script/a.sh"); System.out.println("run:" + run); } }
测试
```java package utils; import java.io.*; public class ShellUtils { public static String convertStreamToStr(InputStream is) throws IOException { InputStreamReader isr = new InputStreamReader(is, "utf-8"); BufferedReader br = new BufferedReader(isr); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } return sb.toString(); } public static String run(String cmd) { String res = null; try { Process process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", cmd}, null, null); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); writer.write("y");//相当于代替你输入了一次y writer.newLine();//相当于代替你敲了一次回车 writer.flush();//把数据刷新进内存,相当于使之生效 res = convertStreamToStr(process.getInputStream()); } catch (IOException e) { e.printStackTrace(); } return res; } }
下面说原理。
就是在拿到那个输出前再多给它输入一些东西嘛,
比如有个脚本非得输入y才可以执行下去,你用java执行这些脚本总不能手动去输入吧。ok,这个自动帮你输入了。代码要改改。