我正在寻找一个小的 shell 脚本,它将把任何东西通过管道输入,并将其转储到一个文件中......用于电子邮件调试目的。有任何想法吗?
11 回答
unix 命令 tee 执行此操作。
man tee
cat > FILENAME
你并不孤单需要类似的东西......事实上,几十年前有人想要这个功能并开发了tee :-)
当然,您可以使用 > 字符将 stdout 直接重定向到任何 shell 中的文件:
echo "hello, world!" > the-file.txt
标准的 unix 工具 tee 可以做到这一点。它将输入复制到输出,同时还将其记录到文件中。
使用 Procmail。Procmail 是你的朋友。Procmail 就是为这种事情而设计的。
如果要在脚本中分析:
while /bin/true; do
read LINE
echo $LINE > $OUTPUT
done
但是你可以简单地使用 cat。如果 cat 在标准输入上得到了某些东西,它会将其回显到标准输出,因此您必须将其通过管道传送到 cat >$OUTPUT。这些也会做同样的事情。第二个也适用于二进制数据。
如果你想要一个 shell 脚本,试试这个:
#!/bin/sh
exec cat >/path/to/file
如果 exim 或 sendmail 是写入管道的内容,那么 procmail 是一个很好的答案,因为它会为您提供文件锁定/序列化,并且您可以将它们全部放在同一个文件中。
如果您只想写入文件,那么 - tee > /tmp/log.$$ 或 - cat > /tmp/log.$$ 可能就足够了。
用于<<command>> | tee <<file>>
将命令通过管道<<command>>
传输到文件<<file>>
中。
这也将显示输出。
嗯?我想,我不明白这个问题?
你不能把你的管子端成一个>> ~file
例如
echo "Foobar" >> /home/mo/dumpfile
将 Foobar 附加到转储文件(并在必要时创建转储文件)。不需要 shell 脚本......这就是你要找的吗?
如果你不关心输出结果
cat - > filename
或者
cat > filename