shell - UNIX shell 中的 < 和 cat 之间是什么?

标签 shell unix

我正在研究 Linux,发现输入运算符符号“<”似乎与命令“cat”的工作方式相同。

➜  /tmp echo "test" > testfile
➜  /tmp cat testfile 
test
➜  /tmp <testfile 
test

我想知道它们之间有什么区别。

最佳答案

按照给出的确切用法

cat testfile

...如果您的 cat 命令符合 POSIX 标准(并且没有被 shell 函数、别名、之前的同名备用命令覆盖),则保证其行为如您的问题所示。 PATH 等)。


<testfile

...相比之下,通常会(特别是如果您的 shell 是 ashdashkshbash)什么也不做——在标准输入上打开 testfile,然后关闭它并继续执行下一个命令。

作为另一个命令的输入源

cat testfile | foo

...在 /usr/bin/catfoo 之间设置 FIFO 或管道。因此,单独的 cat 程序需要读取和写入 testfile 的每个字节,然后 foo 才能读取该内容,并且 foo 只能按照 cat 写入的顺序从前到后读取文件。

foo <testfile

...将 testfile 打开的文件句柄直接连接到 foo 的标准输入。它有一个真正的文件描述符,因此可以使用 seek() 调用在文件中跳转、重新读取部分内容、让不同的子进程处理 testfile 内容的不同部分(无需在主流程中进行大量从前到后的读取并分配组件)等。

关于shell - UNIX shell 中的 < 和 cat 之间是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38927975/

相关文章:

linux - bash "echo"包括中间创建文件的 ">"- 请解释

arrays - 嵌套 for 循环行为 - shell 脚本

shell - 如何在 unix 中使用 awk 列出数组值并对其进行编号

shell - 使用awk计算磁盘空间

macos - 如何在 mac osx 上使用 shell 脚本中的标志和 URL 启动 Chrome

linux - 如何避免在没有访问权限的情况下 cd 到目录

regex - 使用 BASH 中的 shell 脚本在正则表达式上将一个大的 txt 文件拆分为 200 个较小的 txt 文件

c - Linux 中是否有两个硬链接(hard link)连接到一个文件?

linux - Unix:遍历一个目录

bash - 如何使用 openssl 将加密/解密消息输出到 stdout