Submit Search
Upload
Groovy Shell Scripting 2015
•
0 likes
•
2,112 views
U
Uehara Junji
Follow
Improve Scripting life of Groovy. Using ProcessBuilder#inheritIO() and multi line shebang.
Read less
Read more
Technology
Report
Share
Report
Share
1 of 21
Download now
Download to read offline
Recommended
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
Uehara Junji
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3
Uehara Junji
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
Uehara Junji
GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.
Uehara Junji
groovy 2.1.0 20130118
groovy 2.1.0 20130118
Uehara Junji
Recommended
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
Uehara Junji
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3
Uehara Junji
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
Uehara Junji
GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.
Uehara Junji
groovy 2.1.0 20130118
groovy 2.1.0 20130118
Uehara Junji
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Uehara Junji
Groovyの紹介20130323
Groovyの紹介20130323
Yasuharu Hayami
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
Mugen Fujii
Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901
Uehara Junji
Gws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
Uehara Junji
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Uehara Junji
enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summer
Uehara Junji
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*Workshop
Uehara Junji
An Internal of LINQ to Objects
An Internal of LINQ to Objects
Yoshifumi Kawai
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
キメるClojure
キメるClojure
Yoshitaka Kawashima
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Yoshifumi Kawai
SignalRブートキャンプ
SignalRブートキャンプ
Kouji Matsui
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
Yoshifumi Kawai
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
Uehara Junji
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
More Related Content
What's hot
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Uehara Junji
Groovyの紹介20130323
Groovyの紹介20130323
Yasuharu Hayami
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
Mugen Fujii
Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901
Uehara Junji
Gws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
Uehara Junji
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Uehara Junji
enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summer
Uehara Junji
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*Workshop
Uehara Junji
An Internal of LINQ to Objects
An Internal of LINQ to Objects
Yoshifumi Kawai
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
キメるClojure
キメるClojure
Yoshitaka Kawashima
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Yoshifumi Kawai
SignalRブートキャンプ
SignalRブートキャンプ
Kouji Matsui
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
Yoshifumi Kawai
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
Uehara Junji
What's hot
(20)
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Groovyの紹介20130323
Groovyの紹介20130323
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
Groovy base gradle_20130309
Groovy base gradle_20130309
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901
Gws 20130315 gradle_handson
Gws 20130315 gradle_handson
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summer
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*Workshop
An Internal of LINQ to Objects
An Internal of LINQ to Objects
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
キメるClojure
キメるClojure
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
SignalRブートキャンプ
SignalRブートキャンプ
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
Similar to Groovy Shell Scripting 2015
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
Inside frogc in Dart
Inside frogc in Dart
Goro Fuji
復習も兼ねて!C#6.0-7.0
復習も兼ねて!C#6.0-7.0
Yuta Matsumura
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
kimukou_26 Kimukou
20141129-dotNet2015
20141129-dotNet2015
Takayoshi Tanaka
Gws 20120521 gradle
Gws 20120521 gradle
Nobuhiro Sue
Google App Engine for Java
Google App Engine for Java
Takuya Tsuchida
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
Koichi Fujikawa
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)
Nobuhiro Sue
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
tamtam180
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
tamtam180
TDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
Grailsのススメ(仮)
Grailsのススメ(仮)
Tsuyoshi Yamamoto
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
TypeScript0.9
TypeScript0.9
ukayare
RGtk2入門
RGtk2入門
Masahiro Hayashi
Flutterを体験してみませんか
Flutterを体験してみませんか
cch-robo
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
Shohei Arai
TruffleSqueakの紹介
TruffleSqueakの紹介
Masashi Umezawa
Similar to Groovy Shell Scripting 2015
(20)
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
明日から使えるgradle
明日から使えるgradle
Inside frogc in Dart
Inside frogc in Dart
復習も兼ねて!C#6.0-7.0
復習も兼ねて!C#6.0-7.0
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
20141129-dotNet2015
20141129-dotNet2015
Gws 20120521 gradle
Gws 20120521 gradle
Google App Engine for Java
Google App Engine for Java
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
TDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Grailsのススメ(仮)
Grailsのススメ(仮)
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
TypeScript0.9
TypeScript0.9
RGtk2入門
RGtk2入門
Flutterを体験してみませんか
Flutterを体験してみませんか
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
TruffleSqueakの紹介
TruffleSqueakの紹介
More from Uehara Junji
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
Uehara Junji
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
Uehara Junji
Java x Groovy: improve your java development life
Java x Groovy: improve your java development life
Uehara Junji
Groovy 1.8の新機能について
Groovy 1.8の新機能について
Uehara Junji
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Uehara Junji
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224
Uehara Junji
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
Uehara Junji
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
Uehara Junji
Clojure
Clojure
Uehara Junji
Groovy, Transforming Language
Groovy, Transforming Language
Uehara Junji
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 Groovy
Uehara Junji
Lisp Builder
Lisp Builder
Uehara Junji
G*WS 3rd Lightning talk
G*WS 3rd Lightning talk
Uehara Junji
Groovy Now And Future
Groovy Now And Future
Uehara Junji
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)
Uehara Junji
Groovy Conference2008 Nttsoft
Groovy Conference2008 Nttsoft
Uehara Junji
More from Uehara Junji
(16)
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
Java x Groovy: improve your java development life
Java x Groovy: improve your java development life
Groovy 1.8の新機能について
Groovy 1.8の新機能について
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
Clojure
Clojure
Groovy, Transforming Language
Groovy, Transforming Language
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 Groovy
Lisp Builder
Lisp Builder
G*WS 3rd Lightning talk
G*WS 3rd Lightning talk
Groovy Now And Future
Groovy Now And Future
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)
Groovy Conference2008 Nttsoft
Groovy Conference2008 Nttsoft
Recently uploaded
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
Recently uploaded
(9)
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Groovy Shell Scripting 2015
1.
Groovy Shell Scripting 2015 JGGUG
G*Workshop 2015/06/26 上原潤二(NTTソフトウェア)
2.
わたくしは 上原潤二(@uehaj) NTTソフトウェア(株)Grails推進室 JGGUG運営委員 書いたり プログラミングGROOVY(技術評論社) Grails徹底入門(翔泳社) ブログ「Grな日々」
3.
Groovyスクリプト使ってますか? Groovyスクリプトとは クラス定義に囲まれていない、トップレベル の文や関数定義から構成 binding変数が使える コンパイルしない
4.
スクリプトは日々作業に便利 編集してすぐ再実行できる コンパイルやIDEやGradleとかは不要 おおげさなインストールも不要(置くだけ) でも…
5.
いくつか問題がある。 プロセスの扱い クラスパス問題
6.
(問題1) プロセスの扱い
7.
プロセス起動の諸問題 "ls -l".execute() 出力は? println("ls -l".execute().text) 標準エラーは どこへ? "ssh
host.example.com ls".execute() パスワードを聞いてき たら何がおきる?
8.
ProcessBuilder#inheritIO() 本日のネタ:これをGroovyらしい 形で有効活用しようではないか
9.
String.metaClass.exec String.metaClass.exec0 = {
def st = new StringTokenizer(delegate) new ProcessBuilder(st.collect()).inheritIO().start() } "login".exec0().waitFor() println "done" waitForはProcessのメソッド
10.
パイプ String.metaClass.or = {
String rhs -‐> delegate.execute() | rhs.execute() } Process.metaClass.or = { String rhs -‐> delegate | rhs.execute() } String.metaClass.or = { Process rhs -‐> delegate.execute() | rhs } "echo 123abc" | "tr 'a-‐z' 'A-‐Z'" | "grep B".exec(input:Redirect.PIPE) 色付きGrepが機能(isatty) https://github.com/uehaj/groovy-shell-scripting-examples
11.
リダイレクト @groovy.transform.BaseScript(cmd.Base1) import java.lang.String
"sed -‐e s/[a-‐z]/A/g".exec(input:"input.txt", output:"output.txt") println new File("input.txt").text println new File("output.txt").text https://github.com/uehaj/groovy-shell-scripting-examples
12.
メソッド追加はいつやるの? staticイニシャライザ 不安 拡張メソッド? Jarに梱包する必要がありスクリプト用として は面倒
13.
@BaseScriptで簡単確実 Since: Groovy 2.2.0 package
cmd import java.util.StringTokenizer import static java.lang.ProcessBuilder.Redirect abstract class Base0 extends Script { abstract Object runScript() Object run(){ String.metaClass.exec = { def st = new StringTokenizer(delegate) new ProcessBuilder(st.collect()).inheritIO().start() } String.metaClass.or = { String rhs -‐> delegate.execute() | rhs.execute() } Process.metaClass.or = { String rhs -‐> delegate | rhs.execute() } String.metaClass.or = { Process rhs -‐> delegate.execute() | rhs } runScript() } } @groovy.transform.BaseScript(cmd.Base0) import java.lang.String "login".exec().waitFor() println "done"
14.
@BaseScriptの有用性 DSLを作るための手軽な仕掛け置き場 methodMissing, getProperty… Groovyスクリプトでは特定の名前の変数を 定義(クロージャ、マップ、…) それに対してBase側で任意の処理
15.
(問題2) クラスパス問題
16.
スクリプトのクラスパス問題(1 of 2) スクリプトを実行可能プログラムのように 起動 そのとき、以下を読めるようにクラスパス を指定したい @BaseSciriptの対象 スクリプトから利用するクラス 問題:
shebangは$0を解釈しない
17.
スクリプトのクラスパス問題(2 of 2) スクリプトの場所($0)相対で読みこんで欲 しい スクリプトごとにCLASSPATH環境変数に追 加したくない😔 すべてを
/.groovy/libにぶちこむのはもっと 嫌😖 Perl, Ruby, Pythonなどではあたりまえの話 Groovyスクリプトを呼び出すShell Script/.bat を書く あきらかな負け 😖
18.
Linux,MacOS 以下のようにすると勝つる 😃 #!/bin/bash //usr/bin/env
groovy -‐cp "`dirname $0`" "$0" $@; exit $? @groovy.transform.BaseScript(cmd.Base1) … ├── thisscript.groovy └── cmd/ └── Base1.groovy
19.
Windows スクリプトはPATHの通ったところに置いた上で「管理 者として実行」したコマンドプロンプトで以下を実行 ただし、 PATH配下をすべて見てしまう 😟 「ダブルクリックしてスクリプト起動」に対応しない assoc .groovy=groovyscript
ftype groovyscript=C:groovy-‐2.4.1bingroovy.bat -‐cp "%PATH%” "%1" %*
20.
まとめ 日々作業はGroovyで片付けよう!! おまけ docopt.java便利
21.
参考リンクなど @BaseScriptアノテーションはscriptをインクルードする のに使えます http://uehaj.hatenablog.com/entry/2014/04/25/ 220853 https://github.com/docopt/docopt.java サンプルコード https://github.com/uehaj/groovy-shell-scripting- examples
Download now