【问题标题】:Shell Scripting: Calling mailx in a loopShell 脚本:循环调用 mailx
【发布时间】: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 到包含文件的目录”。都没有用。

标签: shell scripting mailx


【解决方案1】:

在作为附件传递到 mailx 的文件名 ($ZIPFILE) 中,我可能有一个或多个肉眼看不到的字符。我今天在故障排除时再次键入了部分脚本,这解决了问题。但是上面的脚本很好。

【讨论】:

    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-05-17
    • 1970-01-01
    • 2018-01-08
    相关资源
    最近更新 更多