引数がたくさんあるコマンドを何度か実行したくて,そのさいに,コマンドの一部分だけを書き換えながら実行したい,ということがある.
簡単な場合だと,3つの足し算を何度かやりたいとき,
% expr 1 + 2 + 3 6 % expr 4 + 5 + 6 15
みたいなのをちまちま打っていくのはめんどう.そこで,interactive.rbというのを作った.
interactive.rb
3つの足し算なので,毎回書き換えたいところをHERE
として,interactive.rbに与えて起動する.
% ruby interactive.rb expr HERE + HERE + HERE
起動すると,順番に,いまコマンドはこうなってるけど,どうしますか? と聞かれるので,1, 2, 3と順番に入力して,最後にyすると実行してくれる.実行すると,また最初から引数どうしますか?って聞いてくれる.
command: expr HERE + HERE + HERE > 1 command: expr 1 + HERE + HERE > 2 command: expr 1 + 2 + HERE > 3 execute expr 1 + 2 + 3? (y/N) > y 6 command: expr HERE + HERE + HERE > 4 command: expr 4 + HERE + HERE > 5 command: expr 4 + 5 + HERE > 6 execute expr 4 + 5 + 6? (y/N) > y 15
実世界での使い方
コマンドラインからWebアプリケーションのHTMLのテンプレートファイルをリファクタリングするツールを作っているのだけど,コマンドラインから複雑な入力を何度も与えるのが大変だった.
そこで,以下のように,このテンプレートファイルを切り出して,このディレクトリに置いていきたい,という形でinteractive.rbを起動すると,入力に集中することができて便利.
_(なんとか).htmlに切り出したいので,_HERE.html という形で指定する.
% ruby interactive.rb xrt extract templates/bookmark/add.html HERE templates/ bookmark/_HERE.html command: xrt extract templates/bookmark/add.html HERE templates/ bookmark/_HERE.html > <input type="text" id="url" command: xrt extract templates/bookmark/add.html <input type="text" id="url" templates/ bookmark/_HERE.html > input_url execute xrt extract templates/bookmark/add.html <input type="text" id="url" templates/ bookmark/_input_url.html? (y/N) > y % git diff diff --git a/templates/bookmark/add.html b/templates/bookmark/add.html index ce6b9da..ea2a9c2 100644 --- a/templates/bookmark/add.html +++ b/templates/bookmark/add.html @@ -5,7 +5,7 @@ <tr> <th><label for="url">URL</label></th> <td> - <input type="text" id="url" name="url" class="text" value="[% entry ? entry.url : c.req.param('url') %]"/> + [% INCLUDE "bookmark/_input_url.html" %] </td> </tr> <tr>
とりあえずgistに置いてます
ご利用ください
https://gist.github.com/hitode909/40c7c46019df45e23ff665cdf8b1ba09