通过Java启动Shell、Bat脚本,执行脚本命令,支持接收正常结果及异常结果。
@Slf4j
public class ScriptUtil {
/**
* @param pathOrCommand 脚本路径或者命令
* @return
*/
public static List<String> exceCommond(String pathOrCommand) {
List<String> result = new ArrayList<>();
try {
// 执行脚本
Process ps = Runtime.getRuntime().exec(pathOrCommand);
int exitValue = ps.waitFor();
// if (0 != exitValue) {
// String errorMsg = "call shell failed. error code is :" + exitValue;
// Throw.bizStatusException(errorMsg);
// }
// 只能接收脚本echo打印的数据,并且是echo打印的最后一次数据
BufferedInputStream in = new BufferedInputStream(ps.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null) {
result.add(line);
}
in.close();
br.close();
// 只能接收脚本echo打印的数据,并且是echo打印的最后一次数据
BufferedInputStream error = new BufferedInputStream(ps.getErrorStream());
BufferedReader brerror = new BufferedReader(new InputStreamReader(error));
String lineError;
while ((lineError = brerror.readLine()) != null) {
log.error(lineError);
}
error.close();
brerror.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}