ポータブルな echo 代替、reverb コマンド - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

2013-12-20(Fri) [sh][shell][joke] [更新履歴]

拡張 POSIX シェルスクリプト Advent Calendar 2013、20日目の記事です。

今日のネタは半分はネタです。

echo コマンドで -n を表示するには?

今日はある実験をしていて、echo コマンドで -n を出力できないことに気付きました。

https://twitter.com/satoh_fumiyasu/status/413905325037588480

BSD 的な -n オプションで改行を抑制する echo で -n だけ表示するにはどうしたらいいんだ?? あれれ??

詳細は Twitter のスレッドを追っていただくとして、 結論としては次のような感じです。

先日、echo コマンドの移植性の問題 を取り上げましたが、同じ BSD 系 echo でもこんな非互換性があるという話でした。

基本的なコマンドなのにこうも移植性(ポータブル)の問題があるのは困ったものです。

https://twitter.com/satoh_fumiyasu/status/413921866307235840

echo はせいぜい -n オプションだけにしておいて、 エスケープの解釈とかほかのオプションの追加は止めて欲しかったな。 歴史的ウンコ。 https://twitter.com/HackerMaskee/status/413919870019858432 https://twitter.com/n_soda/status/413920848240574465

echo コマンドの代替、reverb コマンド

そんな中、 @tnozaki さん (鍵付きアカウント) さんからこんな提案ががが!!

https://twitter.com/tnozaki/status/413930345889665024 (非公式 RT: https://twitter.com/satoh_fumiyasu/status/413941018782756864)

echo(1)の代替のreverb(1)を作ろう(適当)

ウホッ、いい名前! いただきました。 ちなみに「反響」という意味です。

echo の代替として利用できるポータブルな実装を作成してみました。 シェルのライブラリー (シェル関数) あるいはコマンドとして利用できます。

Reverb.sh

Reverb.sh / reverb コマンドの使い方

Reverb.sh 内にはシェル関数 reverb() が定義されています。 仕様は次の通りです。

お手軽にシェルスクリプトから利用したいのであれば、reverb() を コピペし、echo の変わりとしてください。

Reverb.sh のまま利用する場合は、まずは適当なディレクトリにインストールしてください。

$ wget -q https://raw.github.com/fumiyas/Reverb.sh/master/Reverb.sh
$ sudo mkdir -p -m 0755 /usr/local/lib/sh
$ sudo cp Reverb.sh /usr/local/lib/sh
$ sudo chmod 0755 /usr/local/lib/sh/Reverb.sh

シェルのライブラリーとして利用するには、シェルスクリプトから . または source コマンドで Reverb.sh をロードし、reverb コマンドを呼びます。

$ export PATH="/usr/local/lib/sh:$PATH"
$ sh -c '. Reverb.sh; reverb Foo Bar'
Foo Bar
$ sh -c '. Reverb.sh; reverb Foo; reverb Bar'
Foo
Bar
$ sh -c '. Reverb.sh; reverb -n Foo; reverb Bar'
FooBar

コマンドとして利用するには、Reverb.shreverb という名前で起動できるようにします。

$ sudo ln -s /usr/local/lib/sh/Reverb.sh /usr/local/bin/reverb
$ reverb Foo Bar
Foo Bar
$ reverb Foo; reverb Bar
Foo
Bar
$ reverb -n Foo; reverb Bar
FooBar

にゃんぱすーコマンドとして利用することもできます。

$ sudo ln -s /usr/local/lib/sh/Reverb.sh /usr/local/bin/にゃんぱすー
$ にゃんぱすー
にゃんぱすー

便利ですね!!

ちなみに、れんげより蛍と小鞠がカワイイです。


ところで、12月25日はクリスマスな上に、 OSS 界隈で地味に活躍されているふみやすさんの誕生日ですね!
http://www.amazon.co.jp/registry/wishlist/27M7TV8CEEF6G?sort=priority

逆に、あなたの書いた OSS や Blog や Advent Calendar が気に入ったら何か送りたく なってしまうかもしれないので、プロフィールや Web サイトに あなたの Amazon 欲しいものリストの URL を貼っておいてくださいね!


私が勤める OSSTech っていう某弊社で社員募集しているようです。 人材紹介会社を介さなければ、入社後に 20万円のボーナス! 「ふみやすっていう人に紹介された」と言ってもらえると私にもボーナス!! → https://www.osstech.co.jp/recruit/


よろしければ、これまで参加した/参加予定のほかの Advent Calendar もどうぞ。