繁体   English   中英

`cat |`和`<`之间有什么区别?

[英]What is the difference between `cat |` and `<`

我想在命令行some_cmd filename的内容发送到some_cmd 运行这个有什么区别:

$ cat filename | some_cmd

$ some_cmd < filename

有哪些情况我可以或应该使用一个而不是另一个?

  • cat foo | somecmd cat foo | somecmd正在运行两个程序 - /bin/catsomecmd ; 并使用FIFO将cat的stdout连接到somecmd的stdin, somecmd只能读取一次。 该FIFO也不会暴露有关原始文件的元数据 - somecmd既不能发现它的名称也不能发现它的大小(没有,对于大小,一直读到最后;这使得cat foo | tail for a ridiculously slow for a multi- GB文件)。

  • somecmd <foo只运行一个程序 - somecmd - 将其stdin连接到文件foo上的直接句柄。 因此,它可以复制该句柄,倒回并重新读取它,将文件的子集分发给不同的线程以并行处理,将文件映射到内存中以便随机访问等。

GNU sortwc -ctailshuf等常用程序在给定真实的可搜索文件句柄而不是FIFO时可以更有效地运行。

始终使用重定向直接从一个文件,而不是cat荷兰国际集团这个文件,除非你有一个具体的和令人信服的理由不这样做。”


作为这种令人信服的理由(您可能希望使用cat )的示例,请考虑您需要流式传输仅由更多特权用户帐户读取的文件的情况。

sudo -u someuser /bin/cat -- /path/to/somefile | somecmd

...让somecmd以原始的非升级权限运行,因此可以配置/etc/sudoers以允许原始命令仅运行该单个特定的cat调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM