次のコマンドはすべて存在しないファイルを開こうとしますfoo
が、エラーメッセージは少し異なります。なぜですか?
$ cat foo
cat: cannot open foo
$ cat < foo
-bash: foo: No such file or directory
答え1
cat foo
これにより、cat
パラメータを使用してコマンドが実行されますfoo
。画面に印刷されるエラーは、完全にコマンドプログラマーの判断で決まりますcat
。
cat < foo
これは、以下を使用してファイルの内容をfoo
コマンドに供給することによって行われます。cat
Bash 標準入力リダイレクト。ファイルが存在しない場合、Bashはcat
。
答え2
$ cat foo
シェル(ここではbash)でコマンドを実行し、cat
引数を渡しますfoo
。 cat プログラムは、引数をファイル名として解釈するよう選択し、ファイルを開こうとします。あなたが見ているエラーは、(自然に)ファイルを開くことができないcatプログラムで発生したことです。
このバージョンは$ cat < foo
シェルで処理されるリダイレクトです。<
シェルにファイルを開き、それをstdinにリダイレクトするように指示するシェル演算子。ファイルが存在しないため、「該当ファイルがありません」というメッセージが表示され、cat
実行もできません。今回はエラーがシェルで発生し、少し異なって見えます。
そのため、2つの異なるエラーが表示されます。理由は同じです。しかし、2つの異なるプログラム(catとbash)から来ました。