如何将 CTRL-D 传递到脚本中的命令行?

如何将 CTRL-D 传递到脚本中的命令行?

我正在使用这条线

 ( cat bodyText.txt; uuencode backup.tar ) | mail -s "backup" [email protected]

在由 cron 触发的 bash 脚本中。

该行几乎是完美的,但它挂起等待Ctrl-D键入,以便可以发送消息和附件。

如何在 bash 脚本中包含Ctrl-以使该行工作?D

答案1

  • uuencode 是: uuencode 名称 < 源文件

  • 也许只需要最后一个空行:; echo -e "\n\n" ;在右括号之前添加,然后重试?-

所以在你的情况下:

( cat bodyText.txt; uuencode backup.tar < backup.tar ; echo -e "\n\n" ; ) | mail -s "backup" [email protected]

另一种方法是使用mutt它更好地处理附件,并了解 mime 类型等:

mutt -s "the subject" -a backup.tar -- [email protected] < bodyText.txt

答案2

正如其他人所说,Control-D 是告诉 shell 发送文件结尾的方式。当流关闭时,从流读取的进程应该到达文件末尾。

但看来您正在尝试以更完整的形式实现已经存在的东西。当然,您可能有理由这么做,但如果您对现有解决方案感兴趣,mpack/munpack是对文件进行 mime 编码并通过邮件发送的命令行程序。您可以阅读联机帮助页看看它是否符合您的要求。

答案3

你的意思是:

uuencode backup.tar < bodyText.txt | mail -s "backup" [email protected]

答案4

使用详细模式 (-v) 以避免 ctrl+d

echo -e 'Mail body'| mail -v -s 'Mail Subject' [email protected]

相关内容