反复创建名为 /dev/stdin 的文件会很危险吗?

use*_*970 0 bash stdin

在 Newham 和 Rosenblatt 的“Learning the Bash shell”第三版中,它在第 15 页中作为评论写道:

如果省略 filename 参数时特定 UNIX 实用程序不接受标准输入,请尝试使用破折号 (0) 作为参数。某些 NIX 系统将标准输入作为文件提供,因此您可以尝试提供文件 /dev/stdin 作为输入文件 argumnet。

最后一句我不清楚 - “将标准输入作为文件提供”是什么意思?

“重复”创建/dev/stdin在系统中命名的文件是不是很危险(我个人使用 Ubuntu 16.04)。

顺便说一句,我在这篇文章中遇到了一个类似的案例。

Ste*_*itt 6

这不是关于创建/dev/stdin,而是关于使用它:您指定/dev/stdin要与默认情况下(或使用-)不支持标准输入的任何命令一起使用的文件,以使其无论如何都使用其标准输入。

因此

cat
cat -
cat /dev/stdin
Run Code Online (Sandbox Code Playgroud)

all makecat从其标准输入中读取(尽管使用 时的方式略有不同,使用/dev/stdin不同的文件描述符,这意味着它在所有情况下都不是等价的)。我不是在创建 /dev/stdin,而是使用预先存在的设备节点作为cat.

  • @Kusalananda Bash 手册说“如果运行 Bash 的操作系统提供这些特殊文件,bash 将使用它们;否则,它将使用下面描述的行为在内部模拟它们。” 所以如果`/dev` 中有一个节点,Bash 就会使用它。 (2认同)