加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

从bash命令输出创建’虚拟文件’?

发布时间:2020-12-15 18:44:15 所属栏目:安全 来源:网络整理
导读:我想知道是否有办法从bash输出创建一个“虚拟文件”. 例: 假设我想通过电子邮件将mysqldump的输出作为附件发送到外部电子邮件地址. 我可以用Mutt这样做. 我需要使用的mutt选项是-a我要附加的文件的名称. 我知道我可以使用临时文件: mysqldump mysqldumpopt
我想知道是否有办法从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

可能吗?如果没有,为什么?

这可能是一个愚蠢的例子,肯定有更简单的方法来做到这一点,但我希望它解释了我关于从另一个命令的输出创建虚拟文件的问题.

这是做你想做的最干净的方法:
mutt 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读