Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

ライブラリ「un」で依存性のないUNIXコマンドが使える

unライブラリを使うと、基本的UNIXコマンドを依存性を気にせず使えます。

library un

要約
Unix の基本コマンドの代替となるユーティリティ。
Makefile 内でシステムに依存しないように用意されました。 mkmf が使用します。

含有リスト

ruby -run -e cp -- [-prv] SOURCE DEST
ruby -run -e ln -- [-sfv] TARGET LINK_NAME
ruby -run -e mv -- [-v] SOURCE DEST
ruby -run -e rm -- [-frv] FILE
ruby -run -e mkdir -- [-pv] DIRS
ruby -run -e rmdir -- [-v] DIRS
ruby -run -e install -- [-pv -m mode] SOURCE DEST
ruby -run -e chmod -- [-v] OCTAL-MODE FILE
ruby -run -e touch -- [-v] FILE
ruby -run -e wait_writable -- [OPTION] FILE
ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION]
ruby -run -e httpd -- [OPTION] DocumentRoot
ruby -run -e help [COMMAND]

Kernelクラス(sleepやputsが定義されている奴)にメソッドが追加・上書きされます。
というわけで、上に示したコマンドであれば、(Ruby環境があれば)依存性を排除して実行できます。

これはmkmfで主に用いられるもののようです。
これは拡張ライブラリのMakefileで利用されます。
依存性でコケると面倒ですから、こういったライブラリが用意されたのでしょうね。

実際使ってみた

$ ruby -run -e mkdir foo; touch foo/bar.rb
$ ls foo/
bar.rb

とまぁ、当たり前の結果しか出来ません。
普通に使う分に旨味はありません。

おまけ

なんで「un」なのかと思いましたが、-r(拡張ライブラリ読み込み)と組み合わせると「-run」になるんですね。
なんでライブラリ名と-rをくっ付ける事ができるのか……と思ってましたが、こういった事情もあるんですかね。(
なお、似た発想である疑いがあるものに「ubygemライブラリ」があります。