1

使用 bash,如何在一行中发送一个命令的输出文件以用作第二个命令中的变量?

我正在尝试使用流媒体和 mutt 使用我的网络摄像头拍照,然后通过电子邮件将其发送到电子邮件地址。我已经了解了以下内容,但不知道如何告诉 mutt 使用在上一个(流媒体)命令中创建的文件。

streamer -o image.jpg && echo "email body" | mutt -a (file from previous command) -s Subject -- recipient@email.com
4

2 回答 2

1

如果我了解如何streamer工作,您可以使用流程替换:

echo "email body" | mail -a <( streamer )

-ashell 为选项提供了一个文件名,mail然后可以读取该文件名以访问streamer.

否则,只需使用 建议的名称mbratch,因为带有邮件的管道在成功完成之前不会运行streamer

streamer -o image.jpg && echo "email body" | mail -a image.jpg

或者,使用一些关于命令行的知识来避免输入image.jpg两次,使用

streamer -o image.jpg && echo "email body" | mail -a !#:2

重用当前命令行的第三个单词(从 0 开始计数)来获取streamer用于输出的文件名。

于 2013-10-22T14:15:39.260 回答
0

AFAIK没有这样的方法。

你可以做的是以下

OUTPUT_FILE="image.jpg"; streamer -o ${OUTPUT_FILE} && echo "email body" | mutt -a ${OUTPUT_FILE} -s Subject -- recipient@email.com

在您的示例中,输出文件名甚至是静态的,因此您可以对其进行硬编码。

于 2013-10-22T14:11:03.327 回答