Unix 连接命令

Unix concatenation commands

这里有一个我不明白的问题:

cat abc.dat | tee bcd.dat | tr ab ba > cde.dat

在这种情况下,我理解翻译部分,但我对管道 | 的含义有点困惑是的,有人告诉我它需要一个程序的标准输出和另一个程序的标准输入。如果我试图解释这一点,如果我错了请纠正我,但你正在获取 abc.dat 的内容,将输出复制到 bcd.dat,然后从 bcd.dat 获取内容] 并将 a 和 b 的实例分别翻译成 b 和 a,然后将其放入 cde.dat?

官方的回答是:abc.dat复制到bcd.dat。 abc.dat 被复制到 cde.dat 但 'a' 被 'b' 替换,'b' 被 'a' 替换。但为什么 abc.dat 被复制到 cde.dat 而不是 bcd.dat?管道不继续了吗?

tee 实用程序从 stdin 读取并首先将其写入 stdout, 其次是作为参数给出的 all 文件.在您的情况下,stdin 被写入 stdout,并写入文件 bcd.dattee 后面的管道将 tee 的标准输出链接到 tr 的标准输入。虽然数据是相同的,但不是文件 bcd.dat 的内容被传送到 tr。它是初始 cat 的输出,这又是文件 abc.dat.

的内容

“官方”回答措辞不佳。 teetr 都不知道 abc.dat;恰好它从 tee 读取的内容是 teecat 读取的内容,这就是 catabc.dat.

读取的内容