【发布时间】:2011-10-26 18:47:00
【问题描述】:
有两件事需要立即注意......
- shell 脚本手动运行良好
- 我写的一个简单的shell脚本(echo hello)通过java运行良好
所以我有一个 shell 脚本,我正在尝试通过 Java 进程运行。
File sqlF = new File("path to deploy script");
Process proc = rt.exec(sqlF + "/deploy.sh");
proc.waitFor();
System.out.println(proc.exitValue());
当我运行这段代码时,我得到一个模棱两可的返回值“1”。
这是 shell 脚本(因为我想问题可能源于这里):
#!/bin/bash
mysql -u XXXX -h XXXXX < XXXXX.sql
mysql -u XXXX -h XXXXX database < DEPLOY-HELPER.sql
关于为什么这不能从 Java 中正确执行的任何想法?
【问题讨论】:
-
在你的 shell 脚本中打开
set -vx并将 stderr 和 stdout 重定向到一个文件,这样你就可以看到发生了什么。首先猜测是您需要将路径设置为mysql。如需快速测试,请将mysql替换为/full/path/to/mysql。祝你好运。 -
你是在linux上运行它吗?此外,在 java 中调用进程,它可能无法正确设置路径或从系统导入变量。
-
@gigadot 是的,它在 Linux 上。我会试一试庇护所!谢谢。
-
我阅读了有关使用 Java 进程运行脚本的文章可能会导致问题,因为您可能无法正确管道 stdout、stderr、stdin。他们推荐使用 Apache Exec 库,我发现运行外部进程很容易,因为它会为您处理输入和输出流。
-
看起来@shelter 是在正确的道路上。拿到我的标准错误后,它显示它不知道我的 XXXX.sql 在第 2 行中的位置。