UNIXの哲学は、1つのことを実行し、それをうまく実行することです。テキストを処理するプログラムを作成します。これは、それがユニバーサルインターフェイスであるためです。
sort
コマンドには、少なくともGNUソート、-o
オプションをstdout
ではなくファイルに出力します。なぜですか、sort foobar -o whatever
できるときに便利ですsort foobar > whatever
?
GNUソートはそれだけではありません。BSDソートにもそれがあります。なぜですか?
(それも良い質問だと思いました...)
Manページから:「指定された引数は、標準出力の代わりに使用される出力ファイルの名前です。このファイルは、入力ファイルの1つと同じにすることができます。」
リダイレクトを使用して同じファイルに移動することはできません。出力リダイレクトはファイルをワイプします。
さらに明確にするために、ファイルを並べ替えて、並べ替えた結果を同じ場所に配置したい場合は、sort < foo > foo
。出力リダイレクトを除いて、出力を受信する準備としてファイルfoo
を切り捨てます。そして、ソートするものは何もありません。 「-o」がなければ、それを行う方法はsort < foo > bar ; mv bar foo
。 -o
オプションは、心配することなく、同様のことを行います。
「-o」オプションはすでに Sixth Edition of Unix のsort
に含まれていました
ただし、これはUnixの哲学の範囲外であることに同意します。 uniq
にはそのオプションがありませんでした(そしてsort
には-u
がありませんでした)。
私のPDP-11では、1つのパラメーターを取る小さなプログラムを使用しました。
renac whatever
whatever
がすでに存在する場合は、stdinからテンポラリファイルにすべてが書き込まれ、stdin入力が枯渇した後にのみ、whatever
に名前が変更されました。これにより、入力を上書きすることなく、ファイル名にリダイレクトする代わりに、コマンドの出力をrenac
にパイプすることができます。このようにして上書きの問題を解決することは、私見がよりUnixの哲学に準拠することです。
プログラムへのその後のいくつかの追加は次のとおりです。標準入力に何も到着しなかった場合(たとえば、コマンドラインの一部を誤って入力した結果)に出力ファイルを上書きせず、指定されたファイルに標準入力を追加するオプションを許可しました。
これは、私が作成した最初の(最初ではないにしても)真のCプログラムの1つでした(私の仕事のほとんどは、そのシステムのPascalで開発しました)。