我在一封邮件中向自己发送多个文件:
file1="/somedir/file1.md"
file2="/somedir/file2.md"
file3="/somedir/file3.md"
file4="/somedir/file4.md"
echo "Body text" | mailx -s "The Files" -a "${file1}" -a "${file2}" -a "${file3}" -a "${file4}" recipient@domain.com
这些文件并不总是在那里,因此如果这些附件中的任何一个不存在,则不会发送邮件。但是,无论如何,我都想发送带有附件的邮件。我可以构建一个嵌套在其中的多个其他 if 语句的 if 语句,但这似乎有点狡猾。什么是更好的方法?
构建一个参数数组(也来自一组候选者(:
files=(/somedir/file1.md
/somedir/file2.md
/somedir/file3.md
/somedir/file4.md)
for f in "${files[@]}"; do
[[ -f "$f" ]] && attachments+=(-a "$f")
done
echo "Body text" | mailx -s "The files" "${attachments[@]}"
您可以通过过滤掉不存在的文件来动态构建-a
选项:
files_arg=
for file in /somedir/file1.md /somedir/file2.md /somedir/file3.md /somedir/file4.md ~/.bashrc; do
[[ -f $file ]] && files_arg="$files_arg -a $file"
done
echo $files_arg
输出:
-a /home/max/.bashrc