1

PS4 環境変数が設定された Java を使用して、bash スクリプトをデバッグ モードで実行したいと考えています。

ProcessBuilder pb = new ProcessBuilder("/bin/bash" ,"-x", "/junk/leaptest.sh");
Map<String, String> env = pb.environment();
env.put("PS4", "${BASH_SOURCE}:::${LINENO}:::COV:");
final Process process = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
PrintWriter pw = new PrintWriter(process.getOutputStream());
String line;
while ((line = br.readLine()) != null) {
    System.out.println("line no--->>" + line);
    pw.println("2000");
    pw.flush();
}

デバッグモードで実行されておらず、PS4環境が設定されていないため、得られる出力

ランタイムコマンドを使用すると、同じことが機能します。

String[] cmd = new String[3];
cmd[0] = "/bin/bash"; // should exist on all POSIX systems
cmd[1] = "-xv";
cmd[2] = args[0];

String[] env = new String[1];
env [0] = "PS4=${BASH_SOURCE}:::${LINENO}::: COV:";
Runtime rt = Runtime.getRuntime();
System.out.println("Execing " + cmd[0]  + cmd[1]);

Process proc = rt.exec(cmd,env);
4

1 に答える 1

1

bashで実行すると、-xトレース情報が標準出力ではなく標準エラーに書き込まれます。次のようなものでそれをキャプチャする必要があります。

PrintWriter pwe = new PrintWriter(process.getErrorStream());
于 2012-07-17T20:17:24.467 に答える