Zai*_*afi 22 command-line io-redirection cat
以下两个命令都尝试打开一个不存在的文件foo
,但错误信息略有不同。可能是什么原因?
$ cat foo
cat: cannot open foo
$ cat < foo
-bash: foo: No such file or directory
Run Code Online (Sandbox Code Playgroud)
dr_*_*dr_ 30
cat foo
Run Code Online (Sandbox Code Playgroud)
这将运行cat
带有参数的命令foo
。屏幕上打印的错误完全取决于命令的程序员决定的内容。
cat < foo
Run Code Online (Sandbox Code Playgroud)
这通过使用Bash stdin 重定向将文件内容提供foo
给cat
命令。如果该文件不存在,则是 Bash 抱怨它。
Cla*_*sen 21
在$ cat foo
shell(这里是 bash)中执行cat
命令并传递参数foo
. cat 程序选择将该参数解释为文件名 - 并尝试打开该文件。您看到的错误来自 cat 程序,它(自然地)无法打开文件。
该版本$ cat < foo
是由外壳处理的重定向。<
是一个 shell 操作符,它指示 shell 打开一个文件并将其重定向到 stdin。该文件不存在,因此您会收到“没有此类文件”。这次错误来自shell(bash)并且看起来有点不同。
这就是为什么您会看到 2 个不同的错误。原因是相同的 - 但它来自 2 个不同的程序(cat 和 bash)。