我正在学习Linux的cat命令,并发现了这个命令:
$ echo 'Text through stdin' | cat - file.txt
这里的“-”是什么意思?如果不输入它,那么“通过stdin输入文本”的内容就不会显示出来。
通常使用破折号(-
)来代替stdin
。
即使man cat
也提到了这一点:
如果没有文件名或文件名为“-”,则读取标准输入。
手册甚至有一个例子说明了如何使用破折号和普通文件名(这个例子与您最初的问题非常接近,但包括答案):
cat f - g
Output f's contents, then standard input, then g's contents.
-
告诉 cat 从 stdin
读取。这是非常常见的,很多应用程序如果你传递 -
给它们,它们就会从 stdin 中读取。
有些应用程序将 -
用作 stdout
。
以下是下载 blender 的示例,我们不将其写入文件,而是直接将其写入 stdout
并将其管道传输到 tar,在下载过程中实时展开。
wget -c https://download.blender.org/source/blender-2.90.1.tar.xz -O - | tar -xzv
-O -
告诉wget直接将内容写入stdout
。$ echo 'Text through stdin' | cat - file.txt
-
告诉cat
从标准输入读取数据,本例中是从管道中读取,即从echo 'Text through stdin'
命令的输出读取。