Unix 管道 - echo 和 cat

3
我在Unix Bash Shell中遇到了以下命令的问题:
echo "This is some text" | cat dashes - dashes

“dashes”是一个包含文本行“---------------------------------”的文件。
根据我的理解,左侧命令的标准输出流变为右侧命令的标准输入流。我期望打印出来的内容是:
This is some text
---------------------------------

但实际上打印出来的是这样的:
---------------------------------
This is some text
---------------------------------

所以我有两个问题:

  1. 当echo管道输入到cat时,会发生什么,使得输出结果如此?

  2. 命令末尾的“-破折号”是如何起作用的?


正如 man cat 所说,- 表示标准输入,因此 cat dashes - dashes 的意思是连接 dashes、标准输入和 dashes - Biffen
@Biffen,“This is some text”是如何出现在两行破折号之间的?我原本期望STDIN会被连接到前面而不是后面。 - Vaderico
不同的“文件”(其中STDIN是其中之一)按照您指定的顺序进行连接。 - Biffen
啊哈,我终于明白了,非常感谢,现在我懂了。 - Vaderico
1个回答

2
这是预期的,因为在两个文件名之间使用-表示打印来自stdin的所有数据。以这个例子为例:
date | cat dashes - dashes
---------------------------------
Fri May 29 05:49:05 EDT 2015
---------------------------------

这不是一个bash主义事件,而是cat(以及许多其他Unix工具)的实现细节。 - Ephemera
1
啊,我明白了,-会被STDIN中的任何内容替换!干杯 - Vaderico
2
把“-”看作文件“STDIN”的名称。 - Rambo Ramon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接