GroovyでOS独自のコマンドをパイプしてみる。

2019-01-23Groovy

Groovyスクリプト(Java)内でパイプしてみようとふと思った

Groovyスクリプト(Java)の中でネイティブコマンドからの出力をを パイプ し別のネイティブコマンドで受け取ってみる。

ホームディレクトリの中のテキストファイルをピックアップしてみる。
僕のWindowsPCには Cygwin がインストールされているので、 Cygwin のコマンドを実行してみる。

def bin = "C:/cygwin/bin"
def p1 = "${bin}/ls.exe -lta ~/".execute()
def p2 = "${bin}/grep.exe txt".execute()
println((p1 | p2).text)

この程度の処理にパイプが必要か?

これはお遊びの範囲なのは重々承知

このぐらいであれば

new File(path).listFiles().findAll{ it.name =~ /.+.txt/ }.each{
    println it.name
}

と記述したほうがはるかにいいだろうし、そもそも Cygwin がインストールされているなら

ls.exe -lta ~/ | grep.exe txt

でいいのではないかというツッコミは認める。

とはいえ、Javaプログラム内で標準出力+標準入力の連携ができるのは面白い

diff実行→差分を整形してレポートへ 、とかできるのは魅力的。

面白いのは、Groovyスクリプト(Javaプログラム)内で

Processクラスインスタンス | Processクラスインスタンス

にて、標準出力の受け渡しができるということ。
どうしてもJava上ですべてのロジックを組まないといけない場合でも、外部コマンドを組み合わせて車輪の再発明を避けることができる。
これは面白い。

2019-01-23Groovy