【问题标题】:difference between pipelining and redirection in linuxlinux中流水线和重定向的区别
【发布时间】:2011-08-13 18:11:31
【问题描述】:

谁能告诉我区别?例如:
如果我有一个文件a.txt,内容如下:

一个
b
c

cat a.txt | catcat < a.txt 之间有什么区别
在我看来,他们都模拟了标准输入,是正确的,还是有区别?非常感谢。

【问题讨论】:

  • 投票转为超级用户,这不是编程问题。
  • @unwind 呃..是的。 Bash 是一种编程语言。这是高级别的编程。
  • 问题在这里(更适合的地方):askubuntu.com/questions/172982/…

标签: linux redirect pipelining


【解决方案1】:

管道从一个进程到另一个进程(第一个示例中的cats),因此需要两个进程协作。重定向由 shell 本身处理。在 working with variables 等 shell 中执行操作时,这可能很重要。

【讨论】:

    【解决方案2】:

    重定向不会“模拟 STDIN”。当您重定向时,文件 进程的标准输入。特别是,如果输入是常规文件,则许多程序的行为与输入是管道或 tty 时不同,因此您可能会得到不同的行为。例如:

    $

    【讨论】:

    • 对不起,我是新来的,您能否解释一下您的示例程序,谢谢。
    • @user685275 程序只是检查它的输入流(stdin)是否是一个常规文件。如果是,则打印“是常规文件”。如果没有,它什么也不做。当您从文件重定向时,该文件是程序的输入流。当您从另一个进程进行管道传输时,管道的读取端是输入流。当您在没有来自 tty 的管道或重定向的情况下运行时,tty 就是输入流。
    • 感谢您的回答,不胜感激。
    【解决方案3】:

    首先,两个结果是相同的。没什么好说的。

    对于cat a.txt | cat的工作原理,第一只猫取参数a.txt,然后打印其内容。您将第一个的stdout 传递给第二个的stdin。第二个cat 找不到任何参数,因此它从stdin 读取内容并打印出来。

    由于第二条命令使用<,系统将catstdin替换为a.txt的文件流。其他一切都与第一种情况下的第二只猫相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2012-06-08
      • 2015-06-08
      • 1970-01-01
      • 2014-05-14
      相关资源
      最近更新 更多