ポータブルな 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万円のボーナス! 「ふみやすっていう人に紹介された」と言ってもらえると私にもボーナス!! → http://www.osstech.co.jp/company/recruit

バツイチでアラフォーでほとんど諦めていますが、新たなパートナーも募集中です。 ちゃんと愛情表現してくれて精神的に自立している女性がいいです。お友達から始めましょう。 → https://twitter.com/satoh_fumiyasu


よろしければ、過去の Advent Calendar もどうぞ。