单个bash行中的嵌套命令

时间:2013-10-22 13:59:20

标签: linux bash pipe mutt

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

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

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

2 个答案:

答案 0 :(得分:0)

AFAIK没有这样的方式。

您可以做的是以下

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

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

答案 1 :(得分:0)

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

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

shell为-a选项提供了一个文件名,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

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