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

什么';将管道输入转储到文件的简单方法是什么?(Linux),linux,pipe,exim,Linux,Pipe,Exim,我正在寻找一个小的shell脚本,它可以接受任何管道中的内容,并将其转储到一个文件中。。用于电子邮件调试目的。有什么想法吗?使用Procmail。Procmail是你的朋友。Procmail就是为这类事情而设计的。unix命令tee就是这样做的 man tee 标准unix工具tee可以做到这一点。它将输入复制到输出,同时也将其记录到文件中。需要类似功能的并非只有您一人。。。事实上,几十年前就有人想要这个功能,并开发了:-) 当然,您可以使用>字符将stdout直接重定向到任何shell中的文

我正在寻找一个小的shell脚本,它可以接受任何管道中的内容,并将其转储到一个文件中。。用于电子邮件调试目的。有什么想法吗?

使用Procmail。Procmail是你的朋友。Procmail就是为这类事情而设计的。

unix命令tee就是这样做的

man tee

标准unix工具tee可以做到这一点。它将输入复制到输出,同时也将其记录到文件中。

需要类似功能的并非只有您一人。。。事实上,几十年前就有人想要这个功能,并开发了:-)

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

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

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

难道你不能把你的管道端到一个
>>文件中吗

比如说

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

将Foobar附加到转储文件(并在必要时创建转储文件)。不需要shell脚本。。。这就是您想要的吗?

如果您想在脚本中分析它:

while /bin/true; do
    read LINE
    echo $LINE > $OUTPUT
done

但是你可以简单地使用cat。如果cat在stdin上获取了一些内容,它会将其回显到stdout,因此您必须通过管道将其传输到cat>$OUTPUT。这些也会起到同样的作用。第二种方法也适用于二进制数据。

如果您不关心输出结果

cat - > filename


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

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

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

如果您只想写入一个文件,那么 -tee>/tmp/log$$ 或 -cat>/tmp/log$$ 可能已经足够了。

使用
|tee
将命令
导入文件


这也将显示输出。

此解决方案的另一个优点是,如果您缺少创建文件的权限,您将在
stderr
上收到错误消息。
cat > filename
#!/bin/sh
exec cat >/path/to/file