web-dev-qa-db-ja.com

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

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

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

これは、catコマンドを引数fooで実行します。画面に出力されるエラーは、コマンドのプログラマーが何を決定したかに完全に依存します。

cat < foo 

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

30
dr_

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

バージョン $ cat < fooは、シェルによって処理されるリダイレクトです。 <は、ファイルを開いてstdinにリダイレクトするようにシェルに指示するシェルオペレーターです。ファイルが存在しないため、「そのようなファイルはありません」と表示されます。今回のエラーはシェル(bash)に由来し、少し異なって見えます。

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

20
Claus Andersen