【发布时间】:2017-10-23 19:26:28
【问题描述】:
我正在尝试编写一个脚本,我需要使用该脚本发送多封电子邮件,其中一个文件作为每封电子邮件的附件。这是因为邮件附件大小限制。
我在一个目录中有 zip 文件,它们是 file01.zip、file02.zip 等,大约有 4-5 个这些文件。
-- File count is normally passed in
numFiles=5
fileCounter=1
datestr="`date +"%m/%d/%Y"`"
while [ $fileCounter -le $numFiles ]
do
SUBJECT_LINE="Weekly files ($fileCounter of $numFiles) - $datestr"
echo "[`date`] E-mailing file ($fileCounter of $numFiles) ... "
ZIPFILE="file0$fileCounter.zip"
echo $ZIPFILE
ls -ltr $ZIPFILE
mailx -a "$ZIPFILE" \
-r no-reply@host.com \
-s "$SUBJECT_LINE" \
$TO_LIST < /dev/null
echo "[`date`] Done"
fileCounter=$(( $fileCounter + 1 ))
done
如您所见,我正在尝试循环调用 mailx。我也尝试了以下方法
for file in file0*.zip
do
...
done
当我使用 echo 打印出 ZIPFILE 名称时,我能够看到它们,但尽管文件在那里,但循环中的 mailx 命令返回以下内容:
No such file or directory
我可以从控制台运行相同的 mailx 命令并发送电子邮件。我也可以在没有循环的情况下发送一封电子邮件,但是在循环中这样做似乎会导致问题。我错过了什么吗?
【问题讨论】:
-
嗨 Amar 我所看到的是您只声明了文件名而不添加完整路径,请使用文件的完整路径尝试它,因为 shell 脚本无法识别文件位于。到您的变量
ZIPFILE添加完整路径,如下所示ZIPFILE="THIS/IS/THE/FILES/PATH/file0${fileCounter}.zip" -
在发布此内容之前,我确实在测试中添加了完整路径,但这也不起作用。我在上面的代码 sn-p 之前尝试了这一行,用于“cd 到包含文件的目录”。都没有用。