0

Java プログラムからシェル スクリプトを実行しています。そのシェル スクリプトで、データマート サーバーに接続して resmgr コマンドを実行していますが、resmgr コマンドの出力を取得できません。コマンド ラインから同じコマンドを実行すると、取得できます。出力を取得します。

シェル スクリプト:

#!/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);
        }
    }
}
4

1 に答える 1

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)"};

残りのコードはそのままにしておきます。また、スクリプトが現在の作業ディレクトリにあることも確認してください

于 2014-04-08T23:44:06.290 に答える