我做了一些自动检查,并希望在文件发生更改时发送邮件。我希望邮件正文包含文件的新版本、一些静态文本和文件的旧版本,所以我要做的是
cat mettab.txt metalerttext.txt mettab.old.txt | /usr/bin/mail -s Metalerts (...)
其中mettab.txt是新版本,metalerttext.txt是静态文件,mettab.old.txt是旧版本。
但是,我觉得使用heredoc比使用metalerttext.txt更好。但是是否可以像上面那样在一行中完成此操作,或者是创建临时文件并执行类似以下操作的唯一可能性:
cp mettab.txt mailtemp.txt
cat <<EOF
some text from metalerttext.txt
EOF >> mailtemp.txt
cat mettab.old.txt >> mailtemp.txt
在邮寄 mailtemp.txt 并删除该文件之前。
或者我忽略了什么? (metalerttext.txt只是一行)
正如评论中提到的,是的:
-
明确告诉从cat
stdin 读取,即 plain 的cat
作用相同cat -
(除非有一些细微的差异,错误消息等)。您也可以将重定向放在第一位<<'EOF' cat ...
。如果您的系统有
/dev/fd/N
,那么您甚至可以在同一命令上使用多个此处文档...:这是使用命令替换的解决方案
但请记住
mettab.txt
和mettab.old.txt
存在。如果不这样做,它将输出一个空行并向 stderr 显示消息。$(< mettab.txt)
按照手册$(cat mettab.txt)
中的说明使用 bash 。