为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: V8.0
【操作系统】:银河麒麟桌面操作系统V4
【CPU】:
【问题描述】*:在麒麟环境通过terminal执行 ./disql SYSDBA/SYSDBA@127.0.0.1:5236 '/test.sql' 或者 ./disql SYSDBA/SYSDBA@127.0.0.1:5236 \
/test.sql 都是可以正常执行test.sql的,然而需要通过java控制执行多个sql脚本,在linux环境下无法正常执行test.sql脚本。也并没有报错,从执行的日志来看,猜测就是'/teset.sql' 或者 \
/test.sql传入参数有误。有大佬遇到过这种问题吗?
List<String> command = Arrays.asList("./disql", dbconn, "'`/test.sql'");
ProcessBuilder pb = new ProcessBuilder(command);
// 设置工作目录
pb.directory(workDirPath.toFile());
// 构建并执行进程
Process process = pb.start();
// 处理进程输出和错误流
BufferedReader stdOutReader = new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8));
BufferedReader stdErrReader = new BufferedReader(new InputStreamReader(process.getErrorStream(), StandardCharsets.UTF_8));
String outputLine;
while ((outputLine = stdOutReader.readLine()) != null) {
logger.info(outputLine);
}
while ((outputLine = stdErrReader.readLine()) != null) {
logger.error(outputLine);
}
// 等待进程结束并获取退出码
int exitCode = process.waitFor();
System.out.println("Process exited with code " + exitCode);
大佬最后成功了吗,我现在linux环境调用无法执行。
如果非要用java运行操作系统命令,推荐写一个shell文件,用java往shell文件里面写变量吧,然后运行shell文件,这样比较好排查错误,有问题直接运行shell文件就行了。