这个 Linux 命令中的“-”代表什么意思?

8

我正在学习Linux的cat命令,并发现了这个命令:

$ echo 'Text through stdin' | cat - file.txt

这里的“-”是什么意思?如果不输入它,那么“通过stdin输入文本”的内容就不会显示出来。

可能是Does " - " mean stdout in bash?的重复问题(根据上下文,这可能是针对stdin/stdout的...) - Bruno
3个回答

15

通常使用破折号(-)来代替stdin

即使man cat也提到了这一点:

如果没有文件名或文件名为“-”,则读取标准输入。

手册甚至有一个例子说明了如何使用破折号和普通文件名(这个例子与您最初的问题非常接近,但包括答案):

   cat f - g
          Output f's contents, then standard input, then g's contents.

2
重要的是要意识到,在读取了“stdin”之后,文件“file.txt”将会被显示出来。 - PP.
@PP。没错,我添加了手册页的另外两行(顺便提一下,它们紧随我的原始引用之后),这应该可以明确说明问题。 - umläute

5

- 告诉 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

3
$ echo 'Text through stdin' | cat - file.txt

-告诉cat从标准输入读取数据,本例中是从管道中读取,即从echo 'Text through stdin'命令的输出读取。


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