Javaから echo, パイプ, mecabを含むコマンドを実行して結果を文字列で得たい
お世話になっております。さて、コマンドラインで
echo "Javaで外部プロセスを実行する" | /usr/local/Cellar/mecab/0.996/bin/mecab -Owakati
と叩くと Java で 外部 プロセス を 実行 する
が返ってくる状態で次のようなコードを書きました。
public class MeCab {
public static void execute()
{
try
{
String command = "echo \"Javaで外部プロセスを実行する\" | /usr/local/Cellar/mecab/0.996/bin/mecab --Owakati";
String [] args = command.split(" ");
Process process = new ProcessBuilder(args).start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader reader = new BufferedReader(isr);
StringBuilder builder = new StringBuilder();
int c;
while ((c = reader.read()) != -1) {
builder.append((char) c);
}
String text = builder.toString();
int ret = process.waitFor();
System.out.println(text);
System.out.println(ret);
}
catch (IOException | InterruptedException e)
{
}
}
public static void main(String [] a )
{
execute();
}
}
その結果
"Javaで外部プロセスを実行する" | /usr/local/Cellar/mecab/0.996/bin/mecab --Owakati
0
Process finished with exit code 0
となって期待通りに動作しません。mecabの標準入力に文章を与えて結果だけ受け取りたいのですが、どうしたらできるでしょうか?
なお、MeCabのJavaバインディングやKuromojiといった同種のプログラムのJava実装があることは知っていますが、今回は外部プロセスでMeCabを呼びたい事情があります。
開発環境は Mac OS X Ver. 10.14.4と
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
ですが、本番環境はCentOS 6になります。
よろしくお願いします。