sort "$f1"
値のために失敗した$f1
こと開始と-
した場合のか、ここsort
で始まるいくつかの+
(と呼ばれるファイルのための深刻な結果持つことができ-o/etc/passwd
、たとえば)を。
sort -- "$f1"
(--
オプションの終わりを示す)は、これらの問題のほとんどに対処しますが、呼び出されたファイルでは失敗します-
(sort
代わりにstdinを意味すると解釈されます)。
sort < "$f1"
これらの問題はありません。
ここでは、ファイルを開くのはシェルです。また、ファイルを開けない場合、潜在的にさらに有用なエラーメッセージ(たとえば、ほとんどのシェルはスクリプト内の行番号を示します)を取得し、使用するとエラーメッセージが一貫することも意味します。可能な限りファイルをリダイレクトします。
そして
sort < "$f1" > out
(反対sort -- "$f1" > out
)、"$f1"
開くことができない場合、out
作成/切り捨てられsort
ず、実行されません。
いくつかの起こりうる混乱(以下のコメントを参照)をクリアするために、ファイル自体がシーク可能である限り、コマンドmmap()
がファイルを実行したり、ファイルlseek()
内で実行したりすることを妨げませんsort
。唯一の違いは、ファイルがシェルによって以前に開かれ、ファイル記述子0で開かれるのに対して、後で異なるファイル記述子でコマンドが開かれる可能性があることです。このコマンドは、必要に応じてfd 0をシーク/ mmapできます。これはcat file | cmd
、今回cmd
のstdinがmmap /シークできないパイプである場合と混同しないでください。