【问题标题】:Execution process in pipeline流水线中的执行过程
【发布时间】:2018-09-04 05:39:11
【问题描述】:

这段代码什么也不显示(如果 date.txt 确实存在):

日期> date.txt |剪切

问题:

  • 如果我们在其中重定向了标准输出,为什么不能使用 date.txt?
  • 是否像 cut 在写入/覆盖之前将 date.txt 作为输入一样?命令执行顺序是从左到右写入管道还是所有命令同时执行并等待上一个管道命令的标准输出中的标准输入?

[为语法和术语错误道歉,并且

日期 |tee date.txt |剪切 --delimiter ' ' --fields 1

有效,众所周知。

]

【问题讨论】:

  • 你是在告诉 shell:“将date 的标准输出发送到文件date.txt 并且也发送到cut 的标准输入”。你的shell没有提供任何方式来表达这一点,所以你必须恢复到外部程序如tee才能达到效果。

标签: linux shell pipe


【解决方案1】:

管道中的命令是同时执行的。所以当你写

date > date.txt | cut --delimiter '' --fields 1 < date.txt

cut 可能会在date 写入文件之前尝试从文件中读取,但没有可读取的内容。如果您使用文件进行通信,则无需管道,只需按顺序编写命令即可。

date > date.txt 
cut --delimiter '' --fields 1 < date.txt

【讨论】:

    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 2017-02-24
    • 2021-12-23
    • 2011-12-13
    • 2013-11-07
    • 2014-01-06
    • 2012-09-16
    • 2011-08-10
    相关资源
    最近更新 更多