パイプ"|"がJavaのruntimeのクラスで使用できない件について
Javaのクラスからdockerに接続しなければいけない事があり、
しかしそのdockerはランダムなportを使用していて、portを調べなければならないと言う。
一つの方法として、runtime execを使い、そのdockerのport番号をgrepする事だ。
最初に書いた実装が以下:
Process p = Runtime.getRuntime().exec("docker port testDocker | grep [\d+$]");
そして結果をプリントしてみたら-1が帰ってきた
コマンドライン上ではちゃんと上手くgrepしてくれているのに何故
調べてみたらRuntime クラスで複数のコマンドを纏めて実行したい場合、shellを介さないと行けないようだ。
String[] cmd = {"/bin/sh", "-c", "docker port testDocker | grep [\d+$]"}; Runtime.getRuntime().exec(cmd);
無事port番号を返してくれたのでメモ