删除重定向运算符不会更改输出。为什么?

删除重定向运算符不会更改输出。为什么?

我在某处看到了重定向的用法,并认为这是一个拼写错误:

grep root < /etc/passwd

但在我运行它之后,我发现它给出了相同的输出 grep root /etc/passwd

$ grep root < /etc/passwd
root:x:0:0:root:/root:/bin/bash

$ grep root   /etc/passwd
root:x:0:0:root:/root:/bin/bash

同样的事情发生在

cat < /etc/passwd
cat   /etc/passwd

但是,当与以下命令一起使用时,重定向将被忽略ls

ls < /etc/passwd

不打印相同的输出

ls  /etc/passwd

怎么了?

答案1

许多处理文件的实用程序都接受标准输入(标准输入)作为流输入,或接受文件名作为参数。您的< file示例将文件的输出重定向到实用程序。该文件由 shell 打开并通过以下方式传递给您的实用程序标准输入..

另一方面 cat file正在处理打开和读取文件,并且不涉及重定向。

ls从不读取文件,因此它不将文件名作为参数打开和阅读文件..(它接受文件名掩码)...对于ls,重定向操作实际上被忽略,因为进程中没有任何内容读取 shell 打开的文件...

要确定任何实用程序的行为方式,只需键入man utility-name在终端中输入... 男人是一个缩写手动的...例如。man cat为您呈现猫的手册

相关内容