如何使用java执行linux终端自定义命令

时间:2014-06-27 11:03:28

标签: java linux shell hadoop

我已经使用Hadoop(HDFS,HBASE,MAPREDUCE)和java开发了二进制引擎,用于生成CSV文件。此引擎执行了一些操作,例如HBASE中的表创建以及从此HBASE生成CSV文件。但是这个引擎只通过命令行执行所有操作,因为输入是以命令的形式从Linux终端给出的。现在我的要求是通过java程序连接这个Linux终端并运行命令但是我无法成功运行任何命令

我尝试了两个选项,但没有一个成功。请提供解决此问题的任何建议或解决方案,因为我只是初学Linux和hadoop来解决问题

第一单向

public class EngineTest {

public static void main(String[] args) {
    try {
Process process = Runtime
                .getRuntime()
            .exec("/home/cloudera/PVGproto/Base/ anloss -i ${TOOL_INPUT}/census_10000_col5.csv  -d ${TOOL_DEF}/attr_all_def.txt -q k=14,dage=2 -g ${TOOL_RES}/census_100_col8_gen.csv");

            process.waitFor();
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
        String line = "";
        String output = "";
        while ((line = bufferedReader.readLine()) != null) {
            output += line + "\n";
        }
        System.out.println(output);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

第二路

我创建了一个ex.sh文件,在这个文件中我把所需的命令执行并从同一个java程序调用这个. sh文件,但同样的事情发生了它没有通过java程序运行命令

 Process process = Runtime.getRuntime().exec("/home/cloudera/PVGproto/Base/ex.sh");

但如果我从Linux终端运行相同的ex.sh,它会成功运行所有命令。

ex.sh

# !/bin/bash
 exec /home/cloudera/PVGproto/Base/ anloss -i ${TOOL_INPUT}/census_10000_col5.csv  -d ${TOOL_DEF}/attr_all_def.txt -q k=14,age=2 -g ${TOOL_RES}/census_100_col8_gen.csv
   echo command run successfully

0 个答案:

没有答案