• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:/dev/stdin)

標準入力の利用価値とは?

このQ&Aのポイント
  • 標準入力や標準出力に対応していないプログラムでも、/dev/stdinを利用すると標準入力に対応できる
  • /dev/stdinを利用することで、パイプやヒアドキュメントを使用して標準入力を簡単に扱える
  • /dev/stdinの利用はファイル名を指定する際に便利であり、標準入力の柔軟な扱いが可能

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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.

kureakai
質問者

補足

>利用しやすいという特性が生きていることが分かります。 ここまでは理解できました。 >その/dev/stdinになります。 ここまでも理解できました。確かに素敵仕様だと思いますが。 ヒアドキュメント実行したら確かに同じ結果が出ました。 ただ、ヒアドキュメントを上手く理解できず頂いたサンプルでは ありがたみが分かりませんでした。

関連するQ&A