未写入标准输出的控制台输出示例

H2O*_*aCl 3 command-line bash stdout

似乎read没有写入标准输出。

$ cat test.sh
#!/bin/bash
read -p “输入一个键并回车”键
echo "密钥是 $key"
$ ./test.sh
键入一个键和 Enterx
关键是 x
$ ./test.sh | 三通文件
键入一个键和 Enterx
关键是 x
$猫文件
关键是 x

在没有脚本的情况下尝试...

$ read -p "键入一个键并回车" key | 三通文件
键入一个键和 Enterx
$猫文件
$ 

此处read描述该命令。简要说明:“从标准输入中读取一行”。

有关管道的信息|,来自William E. Shotts 的The Linux Command Line (2nd Internet Edition)

使用管道运算符“|” (竖线),一个命令的标准输出可以通过管道传输到另一个命令的标准输入: command1 | command2

从手册页tee是这样的描述:

从标准输入读取并写入标准输出和文件

的手册页tee位于此链接

写入控制台但实际上不使用标准输出的程序的所有其他示例的列表在哪里,或者在没有这样的列表的情况下,知道何时写入控制台的程序不使用的一般规则是什么?使用标准输出?

这似乎read违反了最小惊讶原则

wja*_*rea 6

在您的示例中,read正在写入 stderr 而不是 stdout。我是这样知道的:

$ read -p "键入一个键并按 Enter 键:" key >/dev/null
键入一个键并按 Enter:x
$ read -p "键入一个键并按回车键:" key 2>/dev/null
X

您可以对要重定向其输出的任何程序执行此测试。

所以你要找的命令是这样的:

$ read -p "键入一个键并按回车键:" key 2>&1 | 三通文件
键入一个键并按 Enter:x
$猫文件
键入一个键并按 Enter:$

有关上述重定向的解释: