存在しないファイルを開くと、猫は別のエラーを出します


22

次のコマンドは両方とも、存在しないファイルを開こうとしますfooが、エラーメッセージは少し異なります。その理由は何でしょうか?

$ cat foo
cat: cannot open foo
$ cat < foo
-bash: foo: No such file or directory

12
特に新人からの投稿の場合は、書式のみに基づいて投稿をダウン票しないでください。ここで、それは非常に有効な質問です。
ステファンシャゼラス

21
それはする必要がありますcat < food代わりにcat < foo
Tulainsコルドバ

6
@TulainsCórdovaまたは、一部の文化では、food < cat;)
DepressedDaniel


1
最初のエラーのみがから発生しcatます。2番目のメッセージはどこから来るか今、私はそれがで始まることを考えると、不思議bash:...
ドミトリーGrigoryev

回答:


30
cat foo

これによりcat、引数を指定してコマンドが実行されますfoo。画面に表示されるエラーは、コマンドのプログラマーが決定した内容に完全に依存します。

cat < foo 

これは、Bash stdinリダイレクトを使用fooして、ファイルの内容をcatコマンドにフィードします。ファイルが存在しない場合、それについて不平を言うのはBashです。


20

$ cat fooシェル(ここではbash)を実行するcatコマンドを、パラメータを渡しますfoo。catプログラムは、そのパラメーターをファイル名として解釈することを選択し、ファイルを開こうとします。表示されるエラーは、ファイルを(自然に)開くことができないcatプログラムからのものです。

このバージョン$ cat < fooは、シェルによって処理されるリダイレクトです。<ファイルを開いて標準入力にリダイレクトするようにシェルに指示するシェル演算子です。ファイルが存在しないため、「No such file」が表示されます。今回は、エラーはシェル(bash)から発生し、少し異なって見えます。

これが、2つの異なるエラーが表示される理由です。原因は同じですが、2つの異なるプログラム(catとbash)からのものです。


18
番号でcat < foocatリダイレクトが失敗した場合に呼び出されません。それ(そして一貫したエラーメッセージを持っていること)が、可能な場合にリダイレクトを使用する方が良い場合が多い理由の1つです。また、前者が存在しない場合に上書きされるのを防ぐcat < in > outvsを考慮します(シェルは、失敗したリダイレクトの直後にコマンドをキャンセルし、次のリダイレクトを実行せず、を呼び出します)。cat in > outoutin< in> outcat
ステファンシャゼル

クール!純粋なロジック。ナンセンスを編集します。
クラウスアンデルセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.