GroovyでOS独自のコマンドをパイプしてみる。
Contents
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上ですべてのロジックを組まないといけない場合でも、外部コマンドを組み合わせて車輪の再発明を避けることができる。
これは面白い。
ディスカッション
コメント一覧
まだ、コメントがありません