と呼ばれるファイルを並べ替えて、並べ替えられたファイルのf回答を f に保存したい:
sort f >f
しかし、このコマンドは最終的に空のファイルfになります。なぜですか? これを行う代わりに、1つのコマンドを使用して目標を達成するにはどうすればよいですか:
sort f >1
mv 1 f
シェルは、コマンドを呼び出す前sortに出力ファイルを作成します。(そうしなければなりません。そうしないと、sortコマンドの stdout をリダイレクトできません。)したがって、コマンドが引数としてsort実行を開始するまでに、空のファイルになります。ff
-o次のオプションを使用すると、これを回避できます。
sort -o f f
これにより、sortプログラム自体がf入力ファイルの読み取りを開始する前に出力ファイルを作成しますf。また、Unix ライクなシステムでのファイル作成方法により、入力fと出力fは実際には 2 つの別個のファイルになります。
のPOSIX仕様がsort言うように:
-o output
標準出力の代わりに使用する出力ファイルの名前を指定します。このファイルは、入力ファイルの 1 つと同じにすることができます。
>切り捨てて新しいファイルを作成するためです。そして、sort fコマンドが実行される前にシェルによって最初に実行されます。
dup2シェルは、実行する前に (新しいファイルを呼び出して作成することにより) リダイレクトを設定する必要があるためです。sort
いくつかの関数を定義できます
autosort() {
mv $1 "$1.tmp$$"
sort "$1.tmp$$" > $1
}
次に使用しますautosort f