我正在研究 Linux,发现输入运算符符号“<”似乎与命令“cat”的工作方式相同。
➜ /tmp echo "test" > testfile
➜ /tmp cat testfile
test
➜ /tmp <testfile
test
我想知道它们之间有什么区别。
最佳答案
按照给出的确切用法
cat testfile
...如果您的 cat
命令符合 POSIX 标准(并且没有被 shell 函数、别名、之前的同名备用命令覆盖),则保证其行为如您的问题所示。 PATH
等)。
<testfile
...相比之下,通常会(特别是如果您的 shell 是 ash
或 dash
或 ksh
或 bash
)什么也不做——在标准输入上打开 testfile
,然后关闭它并继续执行下一个命令。
作为另一个命令的输入源
cat testfile | foo
...在 /usr/bin/cat
和 foo
之间设置 FIFO 或管道。因此,单独的 cat
程序需要读取和写入 testfile
的每个字节,然后 foo
才能读取该内容,并且 foo
只能按照 cat
写入的顺序从前到后读取文件。
foo <testfile
...将 testfile
打开的文件句柄直接连接到 foo
的标准输入。它有一个真正的文件描述符,因此可以使用 seek()
调用在文件中跳转、重新读取部分内容、让不同的子进程处理 testfile
内容的不同部分(无需在主流程中进行大量从前到后的读取并分配组件)等。
关于shell - UNIX shell 中的 < 和 cat 之间是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38927975/