我正在从java程序执行shell脚本,在那个shell脚本中我连接到datamart服务器并执行resmgr命令但是我无法获得resmgr命令的输出,如果我从命令行运行相同的命令我能得到输出。
Shell脚本:
#!/bin/bash
source /opt/datamart/dataMart.env
/opt/datamart/bin/resmgr -export fgp -colNames "nName frm.dbIndex" -filter "npath($1) frm.name($2)" -noHead -sep ','
Java程序:
import java.io.*;
import java.util.*;
public class Test {
public static void main(String argsm[]) throws IOException, InterruptedException {
String cmd="./getDBIndex1.sh ~AP~Generic~Universal~Throughput \"Inbound Volume (octets)\"";
Runtime run = Runtime.getRuntime();
Process pr = run.exec(cmd);
pr.waitFor();
BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
while ((line=buf.readLine())!=null) {
System.out.println(line);
}
}
}
答案 0 :(得分:0)
我想这是因为cmd
字符串run.exec()
没有按照您的预期解释。尝试将字符串cmd
更改为字符串数组。一世。即只需更改一行:
String cmd="./getDBIndex1.sh ~AP~Generic~Universal~Throughput \"Inbound Volume (octets)\""
为此:
String[] cmd= new String[] {"./getDBIndex1.sh", "~AP~Generic~Universal~Throughput", "Inbound Volume (octets)"};
并保持其余代码不变。并检查脚本是否在当前工作目录中