7

我正在寻找一个小的 shell 脚本,它将把任何东西通过管道输入,并将其转储到一个文件中......用于电子邮件调试目的。有任何想法吗?

4

11 回答 11

25

unix 命令 tee 执行此操作。

man tee
于 2008-09-16T20:35:22.267 回答
11
cat > FILENAME
于 2008-09-16T20:35:58.660 回答
10

你并不孤单需要类似的东西......事实上,几十年前有人想要这个功能并开发了tee :-)

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

echo "hello, world!" > the-file.txt
于 2008-09-16T20:36:22.483 回答
5

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

于 2008-09-16T20:36:22.310 回答
2

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

于 2008-09-16T20:35:16.493 回答
1

如果要在脚本中分析:

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

但是你可以简单地使用 cat。如果 cat 在标准输入上得到了某些东西,它会将其回显到标准输出,因此您必须将其通过管道传送到 cat >$OUTPUT。这些也会做同样的事情。第二个也适用于二进制数据。

于 2008-09-16T20:36:50.483 回答
1

如果你想要一个 shell 脚本,试试这个:

#!/bin/sh
exec cat >/path/to/file
于 2008-09-16T20:37:40.110 回答
1

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

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

于 2008-09-16T20:38:25.643 回答
1

用于<<command>> | tee <<file>>将命令通过管道<<command>>传输到文件<<file>>中。

这也将显示输出。

于 2008-09-17T00:03:12.360 回答
0

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

你不能把你的管子端成一个>> ~file

例如

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

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

于 2008-09-16T20:36:39.347 回答
0

如果你不关心输出结果

cat - > filename

或者

cat > filename
于 2008-09-16T20:37:05.820 回答