我在某处看到了重定向的用法,并认为这是一个拼写错误:
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
为您呈现猫的手册