「file xxx.src」のため、「xxx.src」(該当するファイルまたはディレクトリなし)を開けませんでした。というメッセージが表示されますが、ステータス0(成功)で終了するのはなぜですか?

「file xxx.src」のため、「xxx.src」(該当するファイルまたはディレクトリなし)を開けませんでした。というメッセージが表示されますが、ステータス0(成功)で終了するのはなぜですか?

終了状態が0(成功)になるのはなぜですかfile xxx.srccannot open `xxx.src' (No such file or directory)

$ file xxx.src ; echo $?
xxx.src: cannot open `xxx.src' (No such file or directory)
0

ls:比較:

$ ls xxx.src ; echo $?
ls: cannot access 'xxx.src': No such file or directory
2

ベストアンサー1

表面的な答えは、常にそうだったので、誰もがそうするということです。POSIX指摘

fileオペランドと呼ばれるファイルが存在しないか、読み取れない、またはfileオペランドと呼ばれるファイルの種類を決定できない場合、これは終了ステータスに影響を与えるエラーと見なすべきではありません。

残念ながら、何の理由も示されていないので、POSIXがこれを言及する唯一の明白な理由は歴史的慣行です。

このfileユーティリティは以下から初めて登場しました。Unixの研究バージョン41973年。その時点で、標準ユーティリティはエラーを確認しませんでした(少なくともその時点からプロセスが戻り状態であったにもかかわらず)。バージョン3バージョン2以外の場合)。たとえば、catファイルが存在しない場合、ゼロ以外の状態の戻りを開始します。バージョン8:バージョン7エラーメッセージを印刷して続行します。でも通り過ぎてもバージョン10fileファイルが読み取れない場合にのみゼロ以外の状態で終了しますが、magicデータファイルを読み取れない場合は終了しません。

失敗しない1つの考えられる理由fileは、ファイルの内容だけでなくファイルの種類にも興味があり、「存在しない」をディレクトリ、シンボリックリンク、破損したシンボリックリンクと共に特別な種類のファイルと見なすことです。読めないファイルは実際には特別な種類のファイルではないため、弱い主張です。これは定義できない性格のファイルであり、これは合理的な措置による間違いです。また、適用でき、ls存在しないファイル名が与えられても、エラーは返されません。バージョン10からしかし、これは最終的に一般的な慣行となりました。

だから返品状態fileは時間が過ぎて忘れられたバグのようです。ファイルが存在しないときにエラー状態を返さないことに依存するいくつかのスクリプトがあるかもしれませんfile

おすすめ記事