linux - 流水线中的执行过程
问题描述
此代码不显示任何内容(如果 date.txt 确实存在):
日期 > 日期.txt | 剪切 < date.txt --delimiter ' ' --fields 1
问题:
- 如果我们在其中重定向了标准输出,为什么我们不能使用 date.txt?
- 是否像 cut 在写入/覆盖之前需要 date.txt 作为输入?命令执行顺序是从左到右写入管道还是所有命令同时执行并等待来自上一个管道命令的标准输出的标准输入?
[为语法和术语错误道歉,以及
日期 |tee date.txt | 剪切 --delimiter '' --fields 1
工作,这是众所周知的。
]
解决方案
管道中的命令是同时执行的。所以当你写
date > date.txt | cut --delimiter '' --fields 1 < date.txt
cut
可能会在写入文件之前尝试从文件中读取date
,但没有什么可读取的。如果您使用文件进行通信,则不需要管道,只需按顺序编写命令即可。
date > date.txt
cut --delimiter '' --fields 1 < date.txt