と呼ばれるファイルを並べ替えて、並べ替えられたファイルのf
回答を f に保存したい:
sort f >f
しかし、このコマンドは最終的に空のファイルf
になります。なぜですか? これを行う代わりに、1つのコマンドを使用して目標を達成するにはどうすればよいですか:
sort f >1
mv 1 f
シェルは、コマンドを呼び出す前sort
に出力ファイルを作成します。(そうしなければなりません。そうしないと、sort
コマンドの stdout をリダイレクトできません。)したがって、コマンドが引数としてsort
実行を開始するまでに、空のファイルになります。f
f
-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