我想知道是否有办法从bash输出创建一个“虚拟文件”.
例:
假设我想通过电子邮件将mysqldump的输出作为附件发送到外部电子邮件地址.
我可以用Mutt这样做.
我需要使用的mutt选项是-a<我要附加的文件的名称>.
我知道我可以使用临时文件:
MysqLdump MysqLdumpoptions > /tmp/tempfile && mutt -a /tmp/tempfile admin@example.org
但我宁愿将MysqLdump输出直接重定向到Mutt.
Mutt的-a选项只接受文件而不是流,
但也许有一种方法可以传递某种虚拟文件描述符或类似的东西.
就像是:
mutt -a $(MysqLdump MysqLdumpoptions) admin@example.org
可能吗?如果没有,为什么?
这是做你想做的最干净的方法:
原文链接:https://www.f2er.com/bash/386178.htmlmutt admin@example.org -a <(MysqLdump MysqLdumpoptions)
<()运算符是你要求的;它创建一个FIFO(或/ dev / fd)并分叉进程并将stdout连接到FIFO.除了将stdin连接到FIFO之外,>()执行相同的操作.换句话说,它在幕后为你做了所有mknod的东西;或者在现代操作系统上,以更好的方式做到这一点.
当然,除了与mutt无关之外,它说:
/dev/fd/63: unable to attach file.
我怀疑问题是mutt试图在文件中寻找,你不能在任何类型的管道上做.搜索可能类似于扫描文件以确定它是什么MIME类型以及编码可能起作用(即,文件是7位还是8位),然后寻找文件的开头以实际将其编码到消息中.
如果你要发送的是纯文本,你总是可以做这样的事情,使它成为电子邮件的主要内容(不理想,但实际上有效):
MysqLdump MysqLdumpoptions | mutt -s "Here's that MysqLdump" admin@example.org