mus*_*usa 3 command-line shell bash io io-redirection
我在某处看到了这种重定向的用法,并认为这是一个错字:
grep root < /etc/passwd
Run Code Online (Sandbox Code Playgroud)
但是在我运行它之后,我看到它给出了与以下相同的输出
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
Run Code Online (Sandbox Code Playgroud)
同样的事情发生在
cat < /etc/passwd
cat /etc/passwd
Run Code Online (Sandbox Code Playgroud)
但是,与 一起使用时,重定向将被忽略ls:
ls < /etc/passwd
Run Code Online (Sandbox Code Playgroud)
不打印相同的输出
ls /etc/passwd
Run Code Online (Sandbox Code Playgroud)
怎么了?
许多处理文件的实用程序将接受stdin(标准输入)作为流输入,或接受文件名作为参数。您的< file示例将文件的输出重定向到实用程序。该文件由 shell 打开并通过stdin传递给您的实用程序。
另一方面, with cat file,cat正在处理文件的打开和读取,并且不涉及重定向。
ls从不读取文件,因此它不会将文件名作为参数以打开和读取文件..(它接受文件名掩码)......对于ls,重定向操作实际上被忽略,因为进程中没有任何内容读取外壳打开的文件...
要确定任何实用程序的行为方式,只需man utility-name在终端中输入... man是手动的缩写...例如。man cat为您提供猫的手册
| 归档时间: |
|
| 查看次数: |
420 次 |
| 最近记录: |