アプリ版:「スタンプのみでお礼する」機能のリリースについて

/dev/stdin/ の利用価値を教えてください。
いまいちありがたみがわからないのです。

cat /dev/stdin と入れてみて、「a」と入力すると同じ文字が次の行で表示されました。

#cat /dev/stdin
a ←自分で入力
a ←自動で表示された。


★実行プログラムが標準入力や標準出力に対応していなくでもファイル名を指定するときに
これらのファイルを指定することで、標準入出力に対応できます。
パイプやヒアドキュメントをつかって便利に使えるようになりますよ。

というblog記事も見つかったのですが
いまいち、ピンと来ないのです。

/dev/stdin を使うとどんなメリットがあるのでしょうか
ご教授お願いします。

A 回答 (1件)

Unixの系列のプログラムの場合、パイプを使って小さなプログラムを組み合わせて動かす、という事をよくやります。

例えば、「ホームフォルダから辿れる場所にある全てのファイルのうち、文字列"Hello"が最も多く出現するファイルTop 10を表示したい」という場合には、ファイルの一覧を出力するfind、標準入力を引数に変換するxargs、テキストの中から特定の文字を含む行を抽出するgrep、行単位で文字列の編集を行うsed、行単位での重複を削除しつつその出現回数を数えるuniq、並び替えを行うsort、最初の数個だけを表示するheadを用いると
$ find ~ | xargs grep 'Hello' | sed 's/:.*$//' | uniq -c | sort -r | head
等と書くことができ、
「一つのことを行い、またそれをうまくやるプログラムを書け。協調して動くプログラムを書け。標準入出力を扱うプログラムを書け。」(quoted from wikipedia)というUnixの哲学に則ったプログラムは組み合わせやすく、再利用しやすいという特性が生きていることが分かります。

ところが、中には標準入出力からの入力に対応していないプログラムもあります。そういったプログラムは通常、実行時引数でファイル名を指定して動くのですが、「指定されたファイルがあたかも存在して、そこから文字列を読み取ると標準入力から文字列を読み取ったことになる」という素敵な作用を持つ(ある意味架空の)ファイルが、その/dev/stdinになります。

e.g.)
$ cat /dev/stdin << end. # ここから
> hello.
> ok.
> end. # ここまでヒアドキュメント。catは/dev/stdinを読みに行っている。
hello. # これと次の行は出力された文字列。
ok.

この回答への補足

>利用しやすいという特性が生きていることが分かります。
ここまでは理解できました。

>その/dev/stdinになります。
ここまでも理解できました。確かに素敵仕様だと思いますが。

ヒアドキュメント実行したら確かに同じ結果が出ました。
ただ、ヒアドキュメントを上手く理解できず頂いたサンプルでは
ありがたみが分かりませんでした。

補足日時:2013/06/24 23:42
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!