我正在编写一个脚本,该脚本将运行输出到 STDOUT 的校验和过程,然后我想 grep 匹配 OK 或 FAILED 的行,并用这些匹配做不同的事情(即输出到终端和日志)。我已经观看了大量的 Youtube 视频并阅读了大量关于重定向的内容,但我似乎无法理解重定向究竟是如何工作的。我想要做的是将 STDOUT 链接到多个 grep 而不让它们吞噬不匹配的文本。
这是我尝试使用 cat 而不是 md5sum 的概念,每行都有一个动物名称的文本文件(DOG、CAT、PONY、RHINO、DEER、FOX):
{ cat test.txt 3>&1 | tee /dev/fd/3 | grep DOG; } 3> results.txt
这符合我的期望。我在这里的理解是我在文件上做一只猫,然后打开 fd3,它指向写入 STDOUT(fd1) 的任何内容。由于 grep 会吞噬 fd1 中的所有内容,因此我将 cat 的 STDOUT 明确地发送到 fd3,然后通过管道将 STDOUT 传送到 grep。Grep 将打印出匹配 DOG 的行,然后所有从 cat 写入 fd3 的文本将被推送到 results.txt 文件中。
现在,要链接另一个 grep 以查找其他文本,我必须将 fd3 数据指向回 STDOUT,将其明确返回 fd3,然后通过管道将 STDOUT 传输到新的 grep。
{ { cat test.txt 3>&1 | tee /dev/fd/3 | grep DOG; } …