将管道输入转储到文件中的简单方法是什么? (Linux)

将管道输入转储到文件中的简单方法是什么? (Linux)

What's a simple method to dump pipe input to a file? (Linux)

我正在寻找一个小的shell脚本,它将所有内容通过管道传递到其中,然后将其转储到文件中。以进行电子邮件调试。 有任何想法吗?


Unix命令tee可以做到这一点。

1
man tee

1
cat > FILENAME


您并不是一个人需要类似的东西...事实上,几十年前有人想要该功能并开发了tee :-)

当然,您可以使用>字符将stdout直接重定向到任何shell中的文件:

1
echo"hello, world!"> the-file.txt

标准的UNIX工具tee可以执行此操作。它将输入复制到输出,同时还将其记录到文件中。


使用Procmail。 Procmail是您的朋友。 Procmail就是用于这种事情的。


使用<> | tee <>将命令<>管道传输到文件<>中。

这也将显示输出。


如果exim或sendmail是写入管道的内容,那么procmail是一个很好的答案,因为它将为您提供文件锁定/序列化,并且您可以将它们全部放入同一文件中。

如果您只想写入文件,则
-tee>/tmp/log。$$
要么
-猫>/tmp/log。$$
可能已经足够了。


如果要使用shell脚本,请尝试以下操作:

1
2
#!/bin/sh
exec cat >/path/to/file

如果要在脚本中分析它:

1
2
3
4
while /bin/true; do
    read LINE
    echo $LINE > $OUTPUT
done

但是您可以简单地使用cat。如果cat在stdin上得到了某些东西,它将回显到stdout,因此您必须将其通过管道传递给cat> $ OUTPUT。这些将执行相同的操作。第二个也适用于二进制数据。


如果您不在乎输出结果

1
cat - > filename

要么

1
cat > FILENAME

??我想,我不明白这个问题吗?

您不能只是将管道终止为>> ~file

例如

1
echo"Foobar">> /home/mo/dumpfile

将Foobar附加到转储文件(并在必要时创建转储文件)。不需要shell脚本...那是您要找的东西吗?


推荐阅读