小さいスクリプトをいちいち実行可能ファイルにするのは面倒なので専用プログラムを作りました
頻繁に行う処理を実行可能ファイルにして、タイプ数を減らすのは常套手段ですが、数百行のスクリプトならともなく、 2, 3 行のスクリプトのためにいちいちファイルを作って、スクリプトを書いて、 chmod +x なんて単なる時間の無駄です。
理想はどうかと考えたとき、僕の直感は以下のようなものが理想だと教えてくれました。
まず、一つ一つをファイルにするのではなくて、単一のファイルに複数のコマンドを書きこむ形式にします。
* backup rcp -r ~/.emacs ~/src /backup * find-backups find . -type f -name '*~' -print
上の記述により backup と find-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-mode や org-mode が使えるのは個人的にはスマートだと自画自賛したりしています。
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