Linux “猫”和“猫”有什么区别`

Linux “猫”和“猫”有什么区别`,linux,bash,unix,pipe,io-redirection,Linux,Bash,Unix,Pipe,Io Redirection,我想将filename的内容发送到命令行上的some\u cmd。运行此操作的区别是什么: $ cat filename | some_cmd 及 $some\u cmd

我想将
filename
的内容发送到命令行上的
some\u cmd
。运行此操作的区别是什么:

$ cat filename | some_cmd

$some\u cmd
是否存在我可以或应该使用其中一种而不使用另一种的情况?

  • cat-foo | somecmd
    正在运行两个程序-
    /bin/cat
    ,和
    somecmd
    ;并使用FIFO将
    cat
    的标准输出连接到
    somecmd
    的标准输入,FIFO从开始到结束只能读取一次。该FIFO也不公开原始文件的元数据,
    somecmd
    无法发现原始文件的名称和大小(对于大小而言,没有读取到最后;这使得对于多GB文件而言,
    cat foo | tail
    的速度慢得可笑)


  • somecmd在第一个示例中,您正在创建两个进程,它们之间有一个管道。在第二种情况下,您只运行一个进程,没有管道。在后者中,您可以期望
    fseek(stdin,…)
    成功,但在前者中,您应该期望在stdin上搜索失败,…如果那里的答案不是受欢迎程度而不是正确性的严重影响…@CharlesDuffy我不同意那里的每一个观点,但至少它可能最好地回答了Ashton的问题“在某些情况下我可以使用其中一个而不是另一个?”@xhienne感谢你指出这个问题。我认为它有一些有用的信息。然而,我不是问什么时候
    cat
    被“无用地使用”——我是问这两种方法之间的区别,以及什么时候使用一种方法比另一种方法更合适。(见我的最新问题。)@charlesduff的回答将这一点印在了头上。另一个问题不能完全回答我的问题。回答得很好。这篇相关的文章也是一篇很好的读物:“$(cat文件)”之间的区别是什么$(
    $ some_cmd < filename
    
    sudo -u someuser /bin/cat -- /path/to/somefile | somecmd