Javaプログラムを端末から実行していて、コード内でlinuxコマンドを使用して特定のディレクトリにあるファイルの数を数えようとしています。私は他のすべてのコマンドの出力を得ましたが、これは1つです。Javaプログラムが端末から出力されない
私のコマンドは次のとおりです。ls somePath/*.xml | wc -l
私は私のコードで私のコマンドを実行すると、出力に何も持っていないように見える、まだ私は、端末にまったく同じコマンドを実行すると、それだけで正常に動作し、実際に番号を出力そのディレクトリ内のxmlファイルのここで
が私のコードです:出力
private String executeTerminalCommand(String command) {
String s, lastOutput = "";
try {
Process p = new ProcessBuilder().command("/bin/bash", "-c", command).inheritIO().start();
//Process p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(
new InputStreamReader(p.getInputStream()));
System.out.println("Executing command: " + command);
while ((s = br.readLine()) != null){
System.out.println("OUTPUT: " + s);
lastOutput = s;
}
System.out.println("Done with command------------------------");
p.waitFor();
p.destroy();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("LAST OUTPUT IS: " + lastOutput);
return lastOutput;
}
出力/ W
private String executeTerminalCommand(String command) {
String s, lastOutput = "";
Process p;
try {
p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(
new InputStreamReader(p.getInputStream()));
System.out.println("Executing command: " + command);
while ((s = br.readLine()) != null){//it appears that it never enters this loop since I never see anything outputted
System.out.println(s);
lastOutput = s;
}
p.waitFor();
p.destroy();
} catch (Exception e) {
e.printStackTrace();
}
return lastOutput;//returns empty string ""
}
更新コード:パイプラインを実行するには
Executing command: find my/path -empty -type f | wc -l
Done with command------------------------
1
LAST OUTPUT IS:
Runtime
上で多分(真ProcessBuilderをを使用し、 'pb.redirectErrorStreamをやってみてください); ' –次のコマンドを試してください:' Process p = new ProcessBuilder()。command( "bash"、 "-c"、 "ls somePath/*。xml | wc -l")inheritIO()。start(); ' –
皆さん、ありがとうございますnatelyそれらは私のために働かなかった。 –