以下两个命令都尝试打开一个不存在的文件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
shell(这里是bash)中执行cat
命令并传递参数foo
。 cat 程序选择将该参数解释为文件名 - 并尝试打开该文件。您看到的错误来自 cat 程序,它(自然)无法打开该文件。
该版本$ cat < foo
是由 shell 处理的重定向。<
是一个 shell 运算符,它指示 shell 打开文件并将其重定向到 stdin。该文件不存在,因此您会收到“没有此类文件”,cat
甚至不会运行。这次错误来自 shell (bash),看起来有点不同。
这就是为什么您会看到两个不同的错误。原因是相同的 - 但它来自两个不同的程序(cat 和 bash)。