hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

コマンドの一部をインタラクティブに書き換えながら実行するスクリプト

引数がたくさんあるコマンドを何度か実行したくて,そのさいに,コマンドの一部分だけを書き換えながら実行したい,ということがある.
簡単な場合だと,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