大家好,我遇到一个很奇怪的问题,我也在百度和google上搜了,通过java的Runtime可以调用shell命令,我的tomcat启动后,线程也确实出发了shell命令并执行了,但是我的应用不是一个shell命令,而是一个shell语言写的模块有多个脚本文件构成,其中有一个是调用的入口脚本,我将java中命令替换成  /bin/sh work.sh  就是不能调用 具体代码如下所示:
public static void execShell(String cmd) throws IOException {
int status = -1;
Runtime rt = Runtime.getRuntime();
String str[] = { "/bin/sh", "-c", cmd };
Process pcs = rt.exec(str);
BufferedReader br = new BufferedReader(new InputStreamReader(
pcs.getInputStream()));
InputStream stdout=pcs.getInputStream();
InputStream sterr=pcs.getErrorStream();
OutputStream stdin=pcs.getOutputStream();
String line = new String();

StringBuilder sb = new StringBuilder(" "); 
BufferedReader reader = new BufferedReader(new InputStreamReader(sterr, "UTF-8"));
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n"); 
}
logger.error("sterr="+sb.toString());

while ((line = br.readLine()) != null) {
System.out.println(line);
}
try {
status = pcs.waitFor();
} catch (InterruptedException e) {
System.err.println("processes was interrupted");
logger.info(e.toString());
} catch(Exception ex){
logger.info(ex.toString());
}finally {
br.close();
logger.info("----"+cmd+" end "+status +" sterr "+sterr +" stdout "+stdout +" stdin "+stdin);
IOUtils.closeQuietly(stdout);
IOUtils.closeQuietly(sterr);
IOUtils.closeQuietly(stdin);
}
int ret = pcs.exitValue();
System.out.println(ret);
}cmd 传入的 就是调用 shell脚本的命令,该命令在shell环境中可以使用的