Personal tools
You are here: Home ブログ matsuyama 小さいスクリプトをいちいち実行可能ファイルにするのは面倒なので専用プログラムを作りました
Document Actions

小さいスクリプトをいちいち実行可能ファイルにするのは面倒なので専用プログラムを作りました

頻繁に行う処理を実行可能ファイルにして、タイプ数を減らすのは常套手段ですが、数百行のスクリプトならともなく、 2, 3 行のスクリプトのためにいちいちファイルを作って、スクリプトを書いて、 chmod +x なんて単なる時間の無駄です。

理想はどうかと考えたとき、僕の直感は以下のようなものが理想だと教えてくれました。

まず、一つ一つをファイルにするのではなくて、単一のファイルに複数のコマンドを書きこむ形式にします。

* backup
rcp -r ~/.emacs ~/src /backup
* find-backups
find . -type f -name '*~' -print

上の記述により backupfind-backups という擬似的な実行可能ファイルを手にいれることができました。

後は、

% s backup
% s find-backups

とすることで、それぞれの処理が実行できればよいのです。

激しく既出感がありますが、既出かどうか調べる手段が見つからないし、プログラムを書いてもたいした量にはならないので、上のようなことをするプログラムを書いてみました。

先に断っておきますが、シェルのエイリアスや関数を使っても同じようなことはできますが、僕はその方法が好きじゃありません。なんというか、そこはシェルの範疇じゃないだろうと。まあそんなことはどうでもいいんですが。

以下からダウンロードできます。

http://dev.ariel-networks.com/Members/matsuyama/stuff/s/download

ソースコードの最新は以下から取得することができます。

https://kserver.panicode.com/panicode/s/

中身はただの Perl スクリプトです。特に依存しているモジュールはないので普通に使えると思います。以下のようにインストールしておけばよいでしょう。

% sudo cp s /usr/bin/s
% sudo chmod a+x /usr/bin/s

設定ファイル

設定ファイルの構文は至って単純で、 * <name> から、次の * <name> あるいは %% あるいはファイルの終端までがスクリプトの本体になり、そのスクリプトの名前が <name> になります。 * <name> とスクリプト本体以外では何を書いても問題ありません。

スクリプト本体にシバン行がない場合は /bin/sh がインタプリタになります。また、 s の第二引数以降がそのスクリプトの引数として適用されます。

設定ファイルは $HOME/.s に記述してください。

以下に例を示します。

~/.s:

普通のテキストのように扱えます。

私の大切なファイル達をバックアップする
* backup
rcp -r ~/.emacs ~/src /backup
%%

%% を使うことによりスクリプト本体の終端であることを教えることができます。

バックアップファイルを検索する
* find-backups
find . -type f -name '*~' -print
%%

ソースコードを検索
* grep
grep $1 -r $2 | grep -v .svn
%%

Perl スクリプト
* up
#!/usr/bin/perl
print uc(join(' ', @ARGV))

path (*) を使えば以下のようなこともできます(元々これがしたかった)。

(*) http://dev.ariel-networks.com/Members/matsuyama/personal-locate-program

音楽をランダムに再生
* random
path -d ~/music -rQ '\.(mp3|ogg)$' | shuf | xargs mplayer

設定ファイルに関する余談

「The Art of UNIX Programming」を読んでいるせいか設定ファイルの構文に関しては結構真剣に考えました。とはいっても構文自体が簡単なのでいちいち公言するほどのことではありませんが。 * を使用しているので Emacs で編集する際に outline-modeorg-mode が使えるのは個人的にはスマートだと自画自賛したりしています。

http://dev.ariel-networks.com/Members/matsuyama/images/s-1.png/image

zsh で補完する

zsh 上で s find-[TAB]s find-backups と補完されればとても幸せです。

それをするために、まず .zshrc を編集して以下の設定が存在することを確認しておきます。

~/.zshrc:

fpath=(~/.zfun $fpath)
autoload -U compinit
compinit

次に、以下から _s をダウンロードしてきて $fpath の通ったディレクトリにインストールします。上記の設定の場合は ~/.zfun にインストールします。

https://kserver.panicode.com/panicode/s/_s

これで次回の zsh 起動時から s の補完がきくようになります。

Category(s)
linux
The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/s/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.